【问题标题】:Download all documents from SharePoint List using the URL使用 URL 从 SharePoint 列表下载所有文档
【发布时间】:2019-02-13 10:02:33
【问题描述】:

我想知道如何使用 SharePoint 客户端对象模型 (CSOM) (Microsoft.SharePoint.Client) 和列表完整 URL 从 SharePoint 列表下载所有文档。

例如,如果 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。

感谢任何建议。谢谢

【问题讨论】:

    标签: c# .net sharepoint csom


    【解决方案1】:

    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);
            }
        }
    

    【讨论】:

    • 非常感谢!如何从 URL 中判断它是一个文件夹?
    猜你喜欢
    • 2021-10-31
    • 2020-06-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多