Динамически загружать файл, используя запрос caml, а не методом get folder - PullRequest
0 голосов
/ 05 июня 2019

Я хочу загрузить несколько файлов, скажем, с помощью регулярного выражения, где пользователь предоставляет имя файла через переменную, которое передается в запросе caml и может перебирать URL-адрес списка.Немного нового в этой зоне запроса caml.Любой совет, как этого добиться?

    camlQuery.ViewXml = @"<View> 

           <Query>

              <Where><Eq><FieldRef Name='FileLeafRef' /><Value Type='File'>" + fileToDownload + @"</Value></Eq></Where>

           </Query>

            <ViewFields><FieldRef Name='FileRef' /><FieldRef Name='FileLeafRef' /></ViewFields>

     </View>"; 
                        Web web = clientContext.Web;
                         clientContext.Load(web);
                         clientContext.Load(web.Lists);
                         List list = clientContext.Web.GetList(listUrl);
                         //clientContext.Load(list);
                         //clientContext.ExecuteQuery();
                          ListItemCollection listItems = list.GetItems(camlQuery);
                         clientContext.Load(listItems);
                         clientContext.ExecuteQuery();

                         foreach (var item in listItems)
                         {
                             if (item.FileSystemObjectType == FileSystemObjectType.File)
                             {
                                 Console.WriteLine("This is file");
                             }
                             else if (item.FileSystemObjectType == FileSystemObjectType.Folder)
                             {
                                 Console.WriteLine("This is folder");
                             }

    camlQuery.ViewXml = @"<View> 

           <Query>

              <Where><Eq><FieldRef Name='FileLeafRef' /><Value Type='File'>" + fileToDownload + @"</Value></Eq></Where>

           </Query>

            <ViewFields><FieldRef Name='FileRef' /><FieldRef Name='FileLeafRef' /></ViewFields>

     </View>"; 
                        Web web = clientContext.Web;
                         clientContext.Load(web);
                         clientContext.Load(web.Lists);
                         List list = clientContext.Web.GetList(listUrl);
                         //clientContext.Load(list);
                         //clientContext.ExecuteQuery();
                          ListItemCollection listItems = list.GetItems(camlQuery);
                         clientContext.Load(listItems);
                         clientContext.ExecuteQuery();

                         foreach (var item in listItems)
                         {
                             if (item.FileSystemObjectType == FileSystemObjectType.File)
                             {
                                 Console.WriteLine("This is file");
                             }
                             else if (item.FileSystemObjectType == FileSystemObjectType.Folder)
                             {
                                 Console.WriteLine("This is folder");
                             }

Мне нужно загрузить файл из соответствующего шаблона в переменной FiletoDownload, например, если его . , он должен загрузить все файлы.

1 Ответ

0 голосов
/ 06 июня 2019

Вот фрагмент кода для вашей справки:

        ListItemCollection listItems = list.GetItems(camlQuery);
        clientContext.Load(listItems);
        clientContext.ExecuteQuery();
        foreach (var item in listItems)
        {
            if (item.FileSystemObjectType == FileSystemObjectType.File)
            {
                Console.WriteLine("This is file");
                clientContext.Load(item.File);
                clientContext.ExecuteQuery();

                var fileRef = item.File.ServerRelativeUrl;
                var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, fileRef);
                var fileName = Path.Combine(@"D:\", (string)item.File.Name);
                using (var fileStream = System.IO.File.Create(fileName))
                {
                    fileInfo.Stream.CopyTo(fileStream);
                }
            }
            else if (item.FileSystemObjectType == FileSystemObjectType.Folder)
            {
                Console.WriteLine("This is folder");
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...