SharePoint 2016 FileNotFound Exception - PullRequest
0 голосов
/ 04 апреля 2019

Через C # я пытаюсь загрузить файл из SharePoint (SharePoint 2016). Ниже код, который я использую:

        site = new ClientContext(url);
        //credential setting has no issues. So I am skipping it. I am using NetworkCredentials
        site.Load(web);
        site.ExecuteQuery();
        List list = web.Lists.GetByTitle("Documents");
        site.Load(list);
        site.ExecuteQuery();
        site.Load(list.RootFolder);
        site.ExecuteQuery();
        site.Load(list.RootFolder.Folders);
        site.ExecuteQuery();
        Folder folder = web.GetFolderByServerRelativeUrl(sharePointPath);
        site.Load(folder);
        site.ExecuteQuery();
        site.Load(folder.Files);
        site.ExecuteQuery();

Во время выполнения последнего «site.ExecuteQuery ()» возникает исключение:

ExceptionMessage: File not found
at Microsoft.SharePoint.Client.ClientRequest.ProcessResponseStream

Но по этому пути есть файлы, и мы можем вручную загружать и скачивать с одинаковыми учетными данными. URL-адреса, пути и т. Д. Были перепроверены и никаких проблем с этим Когда я печатаю «folder.ItemCount», он печатает правильный номер. файлов в папке. Только в ExecuteQuery для загрузки файлов это исключение.

Настройки сборки: .NET Framework 4.5 и x64

В других публикациях люди советовали перейти на .NET 3.5, но это было для SharePoint 2010. Кроме того, изменение его на 3.5 приводит к большому количеству ошибок при сборке.

Пожалуйста, помогите исправить это.

1 Ответ

0 голосов
/ 04 апреля 2019

Ниже приведен фрагмент кода для загрузки файла из библиотеки документов SharePoint по умолчанию и сохранения в локальной папке:

 static void Main(string[] args)
        {
            string siteUrl = "http://sp2016/sites/dev";
            ClientContext clientContext = new ClientContext(siteUrl);
            var list = clientContext.Web.Lists.GetByTitle("Documents");
            var listItem = list.GetItemById(5);
            clientContext.Load(list);
            clientContext.Load(listItem, i => i.File);
            clientContext.ExecuteQuery();

            var fileRef = listItem.File.ServerRelativeUrl;
            var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, fileRef);
            var fileName = Path.Combine(@"C:\Test", (string)listItem.File.Name);
            using (var fileStream = System.IO.File.Create(fileName))
            {
                fileInfo.Stream.CopyTo(fileStream);
            }
        }

enter image description here

enter image description here

enter image description here

enter image description here

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