c# - SharePoint - 将文件夹下载为 zip 文件

标签 c# sharepoint

我需要一个 API (C#) 来将文件夹下载为 SharePoint 中的一个 zip 文件。选择一个或几个文件夹后,SharePoint 网站会启用此功能,但我找不到如何以编程方式执行此操作。 我在类 Microsoft.SharePoint.Client.Folder 中没有看到任何内容。也许以某种方式使用 Microsoft.SharePoint.Client.DocumentSet。找不到答案。我可以使用 File.OpenBinaryDirect 按文件执行此文件,但可能已经存在现成的功能。谢谢。

最佳答案

示例代码供您引用。

static void Main(string[] args)
        {
            string _SiteUrl = "https://domain.sharepoint.com/sites/tst";
            using (var clientContext = new ClientContext(_SiteUrl))
            {
                Console.ForegroundColor = ConsoleColor.Green;
                string password = "pw";
                SecureString sec_pass = new SecureString();
                Array.ForEach(password.ToArray(), sec_pass.AppendChar);
                sec_pass.MakeReadOnly();
                clientContext.Credentials = new SharePointOnlineCredentials("lee@domain.onmicrosoft.com", sec_pass);

                Web web = clientContext.Web;
                Folder folder = web.GetFolderByServerRelativeUrl("/sites/TST/MyDoc4/Folder");
                var files = folder.Files;
                clientContext.Load(files);
                clientContext.ExecuteQuery();
                Console.WriteLine();
                //Regex regex = new Regex(_SiteUrl, RegexOptions.IgnoreCase);

                var list = web.Lists.GetByTitle("MyDoc4");
                var libRootFolder = list.RootFolder;
                var subFolder = libRootFolder.Folders.GetByUrl("Folder");
                clientContext.Load(libRootFolder);
                clientContext.Load(subFolder);
                clientContext.ExecuteQuery();
                Console.WriteLine(libRootFolder.ItemCount);
                Console.WriteLine(subFolder.ItemCount);


                using (System.IO.MemoryStream mStream = new System.IO.MemoryStream())
                {
                    using (var archive = new ZipArchive(mStream, ZipArchiveMode.Create, true))
                    {
                        foreach (var file in files)
                        {
                            clientContext.Load(file);
                            Console.WriteLine(file.Name);
                            ClientResult<Stream> stream = file.OpenBinaryStream();
                            clientContext.ExecuteQuery();

                            var zipArchiveEntry = archive.CreateEntry(file.Name);
                            using (Stream zipEntryStream = zipArchiveEntry.Open())
                            {

                                    if (stream != null)
                                    {
                                        stream.Value.CopyTo(zipEntryStream);
                                    }

                            }
                        }
                    }
                    using (var fileStream = new FileStream(@"C:\Lee\FileDownload\test.zip", FileMode.Create))
                    {
                        mStream.Seek(0, SeekOrigin.Begin);
                        mStream.CopyTo(fileStream);
                    }
                }


                Console.WriteLine("done");
                Console.ReadKey();
            }

        }

关于c# - SharePoint - 将文件夹下载为 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50846826/

相关文章:

c# - 如何根据先前的选择过滤下拉列表

c# - 将 KeyDown 键转换为一个字符串 C#

sharepoint - 防止同时编辑列表项

c# - 使用日志记录服务时,对象引用未设置为对象的实例

c# - 用 C# 读取 Excel

c# - 将一些 Excel 公式转换为 C#

web-services - MonoTouch、Sharepoint Web 服务和 xs :any

sharepoint - 更改 SharePoint 中的子网站 Logo URL

c# - 使用 Ninject OWINHost 的 OWIN 自托管应用程序是否需要 system.web?

VBA/.Net 通过 Windows 安全从受密码保护的网站下载文件