C # .Net Загрузка содержимого папки SharePoint Online на сетевой диск - PullRequest
0 голосов
/ 02 июля 2019

У меня есть следующий код:

ClientContext context = new ClientContext("https://Website.sharepoint.com/sites/Subsite");
            context.Credentials = new SharePointOnlineCredentials(Username, GetPasswordFromConsoleInput(Password));

            context.Load(context.Web);
            List list = context.Web.Lists.GetByTitle("Documents");
            context.ExecuteQuery();
            CamlQuery query = new CamlQuery();
            query.FolderServerRelativeUrl = "Documents/Folder1/Folder2/Folder3";


            query.ViewXml = @"<View Scope='Recursive'>
                                <Query>
                                </Query>
                            </View>";

            ListItemCollection folderItems = list.GetItems(query);
            context.Load(folderItems);
            context.ExecuteQuery();

            foreach (ListItem li in folderItems)
            {
                Microsoft.SharePoint.Client.File file = li.File;
                if (file != null)
                {
                    //how to download all files
                }
            }
//How to download one single file in the root "Documents" folder with specific name

1) Мне нужно, чтобы он подключился к веб-сайту SharePoint365 и загрузил все файлы в определенной папке в библиотеке дочернего сайта.Файлы находятся в 3-й папке библиотеки документов.Файлы должны идти в сетевую папку \\server\d$\files

2) Мне нужно сделать то же самое, но только для одного файла в корневом каталоге библиотеки документов с определенным именем.

Теперь это дает мне эту ошибку: 'The 'query.FolderServerRelativeUrl' argument is invalid.' Спасибо за любую помощь!

1 Ответ

0 голосов
/ 03 июля 2019

Пример кода для вашей справки.

string targetSiteURL = @"https://tenant.sharepoint.com/sites/lee";

            var login = "user@tenant.onmicrosoft.com";
            var password = "password";

            var securePassword = new SecureString();

            foreach (char c in password)
            {
                securePassword.AppendChar(c);
            }
            SharePointOnlineCredentials onlineCredentials = new SharePointOnlineCredentials(login, securePassword);

            using (ClientContext clientContext = new ClientContext(targetSiteURL))
            {
                clientContext.Credentials = onlineCredentials;

                Web web = clientContext.Web;
                clientContext.Load(web);                
                clientContext.Load(web, wb => wb.ServerRelativeUrl);
                clientContext.ExecuteQuery();

                List list = web.Lists.GetByTitle("mydoc3");
                clientContext.Load(list);                

                Folder folder = web.GetFolderByServerRelativeUrl(web.ServerRelativeUrl + "/mydoc3/ParentFolder/");
                clientContext.Load(folder);
                clientContext.ExecuteQuery();

                CamlQuery camlQuery = new CamlQuery();
                camlQuery.ViewXml = @"<View Scope='Recursive'>
                                     <Query>
                                     </Query>
                                 </View>";
                camlQuery.FolderServerRelativeUrl = folder.ServerRelativeUrl;
                ListItemCollection listItems = list.GetItems(camlQuery);
                clientContext.Load(listItems);
                clientContext.ExecuteQuery();
                foreach(var item in listItems)
                {
                    var file = item.File;
                    clientContext.Load(file);
                    clientContext.ExecuteQuery();
                    if (file != null)
                    {
                        Console.WriteLine(file.Name);
                    }
                }
            }
            Console.ReadKey();
...