Загрузить все документы из списка SharePoint, используя URL - PullRequest
0 голосов
/ 13 февраля 2019

Я хотел знать, как загрузить все документы из списка SharePoint, используя клиентскую объектную модель SharePoint (CSOM) (Microsoft.SharePoint.Client) и полный URL-адрес списков.

Например, если URL-адресбыло http://teamhub.myorg.local/sites/teams/it/ISLibrary/Guides/

Можно ли напрямую подключиться к этому URL-адресу и получить все документы, хранящиеся там?

Я опробовал приведенный ниже код, но получаю сообщение об ошибке, также, похоже,требуют, чтобы я разделил URL на две части.

            string baseURL = "http://teamhub.myorg.local/sites/";
            string listURL = "teams/it/ISLibrary/Guides/";

            var ctx = new ClientContext(baseURL);
            ctx.Credentials = new SharePointOnlineCredentials(userName, SecuredpassWord);
            var list = ctx.Web.GetList(listURL);
            ctx.Load(list);
            ctx.ExecuteQuery();
            Console.WriteLine(list.Title);

Когда я запускаю этот код, я просто получаю ошибку «Файл не найден».

Можно ли это сделать, просто передавполный URL-адрес где-нибудь?

Мне нужно будет установить это соединение и получить все документы 100 раз для множества разных списков, поэтому было бы лучше, если бы был способ сделать это, используя полный URL.

Любой совет приветствуется.Спасибо

1 Ответ

0 голосов
/ 14 февраля 2019

Microsoft.SharePoint.Client.Web.GetListByUrl использовать webRelativeUrl, например:

Мой сайт: https://tenant.sharepoint.com/sites/TST, библиотека: https://tenant.sharepoint.com/sites/TST/MyDoc4

Таким образом, код будет:

Web web = clientContext.Web;
var lib=web.GetListByUrl("/MyDoc4");

ListURL, которым вы поделились, кажется папкой, поэтому мы можем получить папку и файлы в папке, как показано ниже:

Web web = clientContext.Web;
                Folder folder = web.GetFolderByServerRelativeUrl("/sites/TST/MyDoc4/Folder");
                var files = folder.Files;                
                clientContext.Load(files);
                clientContext.ExecuteQuery();

Загрузить файл :

foreach (var file in files)
                {
                    clientContext.Load(file);
                    Console.WriteLine(file.Name);
                    ClientResult<Stream> stream = file.OpenBinaryStream();
                    clientContext.ExecuteQuery();
                    var fileOut = Path.Combine(localPath, file.Name);

                    if (!System.IO.File.Exists(fileOut))
                    {
                        using (Stream fileStream = new FileStream(fileOut, FileMode.Create))
                        {
                            CopyStream(stream.Value, fileStream);
                        }
                    }
                }

private static void CopyStream(Stream src, Stream dest)
    {
        byte[] buf = new byte[8192];

        for (; ; )
        {
            int numRead = src.Read(buf, 0, buf.Length);
            if (numRead == 0)
                break;
            dest.Write(buf, 0, numRead);
        }
    }
...