SP 2010 Прикрепить файл Клиентская объектная модель - PullRequest
2 голосов
/ 15 сентября 2010

Я создал некоторый код для программного создания элемента списка. Теперь я хотел бы прикрепить файл к списку. Я получаю ошибку 401: не авторизован. Я установил учетные данные, которые работают для создания элемента, но не прикрепления файла. Есть идеи?

Dim credentials As New System.Net.NetworkCredential(MyUser, MyPassword, MyDomain)

Dim SiteUrl As String = MyUrl
Dim clientContext As New ClientContext(SiteUrl)

clientContext.Credentials = credentials

Dim list As List = clientContext.Web.Lists.GetByTitle(MyList)
Dim itemCreateInfo As New ListItemCreationInformation()
Dim listItem As Microsoft.SharePoint.Client.ListItem = list.AddItem(itemCreateInfo)

listItem("Title") = "Test Programmatically Create Item"
listItem("Subject") = "TEST"
listItem("Class") = "101"
listItem("Section") = "20"
listItem.Update()

listItem.Update()
clientContext.ExecuteQuery()

Dim fStream As Stream = File1.PostedFile.InputStream                
Dim attachmentPath As String = String.Format("/{0}/Lists/{1}/Attachments/{2}/{3}", MySite, MyList, listItem.Id, MyFileName)                

'-- This Line Fails with the following error
'-- The remote server returned an error: (401) Unauthorized.               
Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, attachmentPath, fStream, True)

Я знаю, что установка учетных данных верна, потому что если я их не установлю, то получаю эту ошибку при попытке создать элемент списка.

Любые мысли с благодарностью или если есть лучший способ прикрепить файл к элементу списка, пожалуйста, дайте мне знать.

Спасибо!

Ответы [ 2 ]

1 голос
/ 25 июля 2013

Это сработало для меня.Сначала я читаю файл, который необходимо загрузить в память, и использую MemoryStream для передачи файла в SaveBinaryDirect.

    static void  moveFileFromOneFarmToAnother()
   {

        string srcSiteUrl = "SourceSiteUrl";
        string srcFileRelUrl = "ReletiveUrlOfTheListItemAttachment";
        ClientContext srcCC = new ClientContext(srcSiteUrl);
        Web srcWb = srcCC.Web;
        srcCC.Load(srcWb, w => w.ServerRelativeUrl);
        srcCC.ExecuteQuery();
        FileInformation fI = Microsoft.SharePoint.Client.File.OpenBinaryDirect(srcCC, srcWb.ServerRelativeUrl + srcFileRelUrl);
        byte[] buffer = new byte[16 * 1024];
        byte[] byteArr;
        using (MemoryStream ms = new MemoryStream())
        {
            int read;
            while ((read = fI.Stream.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }
            byteArr = ms.ToArray();
        }
        MemoryStream mnm = new MemoryStream(byteArr);
        srcCC.ExecuteQuery();
        string desSiteUrl = "DestinationSiteUrl";
        string desFileUrl = "ReletiveUrlOfTheListItemAttachment";
        ClientContext cc = new ClientContext(desSiteUrl);
        Web wb = cc.Web;
        cc.Load(wb, w1 => w1.ServerRelativeUrl);
        cc.ExecuteQuery();
        Microsoft.SharePoint.Client.File.SaveBinaryDirect(cc, wb.ServerRelativeUrl + desFileUrl, mnm, true);
        cc.ExecuteQuery();
   }
0 голосов
/ 26 октября 2010

Взгляните на следующую ссылку. Это должно указать вам правильное направление.

http://www.sharepointdevwiki.com/display/public/Creating+a+List+Item+instance+programmatically+using+the+object+model?focusedCommentId=7897226

Вы также можете взглянуть на SPSecurity.RunWithElevatedPrivileges ().

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...