Клиентская объектная модель Sharepoint 2010 - загрузить документ (конфликт 409) - PullRequest
7 голосов
/ 06 декабря 2010

Я использую клиентскую объектную модель SP2010 для загрузки в библиотеку документов, следуя указаниям Microsoft здесь: http://msdn.microsoft.com/en-us/library/ee956524.aspx#SP2010ClientOMOpenXml_Uploading

При выполнении следующего кода я сталкиваюсь с кодом состояния HTTP 409 (конфликт).

var clientContext = new ClientContext("http://myservername/sites/subsitename") { Credentials = LogonCredentials };
using (var fileStream = new FileStream(@"C:\Temp\Test.txt", FileMode.Open))
{
    Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, "/MyDocLibraryName/Test_FromClientOM.txt", fileStream, true);
} 

Что я делаю не так?

Ответы [ 4 ]

8 голосов
/ 06 декабря 2010

Проблема заключалась в том, что сайт, на который я загружаю, является дочерним, а не корневым ресурсом sharepoint.Я не знаю, был ли это выбор «дизайна» или нет, но, похоже, вам нужно использовать корень sharepoint для ClientContext, по крайней мере, в этом конкретном случае.

Рабочий код:

var clientContext = new ClientContext("http://myservername") { Credentials = LogonCredentials };
using (var fileStream = new FileStream(@"C:\Temp\Test.txt", FileMode.Open))
{
       Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, "/sites/subsitename/MyDocLibraryName/Test_FromClientOM.txt", fileStream, true);
} 
7 голосов
/ 03 января 2011

Я также столкнулся с ошибкой 409 при попытке загрузить файл через клиентскую объектную модель SharePoint 2010. Убедитесь, что путь, по которому вы загружаете файл до полностью , существует. При вызове не будет создано никаких (вложенных) папок. Не имеет значения, подключаете ли вы ClientContext к корневому веб-сайту или напрямую к дочернему сайту, как вы говорите. Просто убедитесь, что вы всегда предоставляете методу SaveBinaryDirect относительный URL-адрес SPSite для места, куда вы хотите загрузить объект.

Например, если вы подключаете свой ClientContext к http://somesite/sites/subsitename,, убедитесь, что вы передаете SaveBinaryDirect также строку /sites/subsitename/documents/filename.txt, то есть относительно SPSite, а не дочернего сайта. вы подключаетесь к использованию своего ClientContext.

1 голос
/ 27 августа 2015

Soledad Pano имеет запись в блоге Ошибка файла загрузки Sharepoint: ‘Удаленный сервер возвратил ошибку: (409) Конфликт’ , которая помогла мне:

Я понял, что проблема в названии библиотеки. Он содержал черту, например «My-LibraryName». Когда я переименовал его без черты, он начал работать

0 голосов
/ 31 октября 2018

В моем случае файл был загружен с помощью SaveBinaryDirect в библиотеку с включенным контролем версий.Если файл не зарегистрирован, любые последующие попытки загрузить более новую версию приведут к ошибке 409.Обязательно регистрируйтесь после загрузки, когда включено управление версиями.

    var clientContext = (ClientContext)file.Context;
    destinationWebContext.Load(destinationList, d => d.ParentWebUrl);
    destinationWebContext.Load(destinationList, d => d.RootFolder.ServerRelativeUrl);
    clientContext.Load(file, f => f.ServerRelativeUrl);
    clientContext.Load(file, f => f.Name);

    if (clientContext.HasPendingRequest)
       clientContext.ExecuteQueryRetry();

    if (destinationWebContext.HasPendingRequest)
        destinationWebContext.ExecuteQueryRetry();

    var location = string.Format("{1}/{2}", destinationList.ParentWebUrl, destinationList.RootFolder.ServerRelativeUrl, file.Name);
    var fileInfo = File.OpenBinaryDirect(clientContext, file.ServerRelativeUrl);
    File.SaveBinaryDirect(destinationWebContext, location, fileInfo.Stream, overwrite);

    File newFile = destinationWebContext.Web.GetFileByServerRelativeUrl(location);
    newFile.CheckIn("Checked in by provisioning service", Microsoft.SharePoint.Client.CheckinType.MajorCheckIn);
    destinationWebContext.ExecuteQuery();
...