简体   繁体   中英

Download all documents from SharePoint List using the URL

I wanted to know how to download all documents from a SharePoint list using the SharePoint client object model (CSOM) (Microsoft.SharePoint.Client) and the lists full URL.

For example, if the URL was http://teamhub.myorg.local/sites/teams/it/ISLibrary/Guides/

Is it possible to connect directly to that URL and retrieve all documents stored there?

I have tried out the below code but I am getting an error, also it seems to require that I split the URL into two parts.

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

When I run this code I simply get a "File not found" error.

Can it be done by simply passing in the full url somewhere?

I will need to do this connection and get all documents 100's of times over for many different lists, so it would be best if there is a way to do it using the full URL.

Any advice is appreciated. Thanks

Microsoft.SharePoint.Client.Web.GetListByUrl use webRelativeUrl, for example:

My site: https://tenant.sharepoint.com/sites/TST , library: https://tenant.sharepoint.com/sites/TST/MyDoc4

So the code would be:

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

The listURL you shared seems a folder, so we could get the folder and files in folder as below:

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

Download file:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM