繁体   English   中英

如何在按需构建的单个zip上下载多个文件(使用c#或javascript)

[英]How to download multiple files on a single zip built on demand (using c# or javascript)

我正在努力实现一种解决方案,以一次在我的网站上一次下载多个文件。

我尝试了一种客户端方法,但是它不起作用,因为我要打开的文件是图像,并且不适用于图像(iframe解决方案)。

我看过Google的Picasa或Google+,拥有多下载解决方案将是完美的选择:他们“按需”构建zip,这意味着浏览器会继续下载文件,不知道文件的最终大小,但是一旦达到100% ,它停止了,一切正常进行。

我不知道该怎么做。 有任何想法吗?

Tks!

根据Alexei Levenkov和OP的评论,我了解到可以开始将zip文件写入流,而无需事先完全组装它。 幸运的是,.NET 4.5为此目的提供了一个内置实用程序类: System.IO.Compression.ZipArchive

不幸的是,如本问题所述 ,此类与我们打算写入的HttpResponse.OutputStream有一些不兼容之处,因为HttpResponse.OutputStream是不可搜索的,而ZipArchive要求它写入的任何流都可以实现可搜索流的Position成员。 。

但是还是有希望的: svick发布了一个答案 ,可以诊断问题并提供解决该问题的方法。 解决方法涉及简单地创建一个“中间”流,该流实现ZipArchive所需的成员,并将所写入的内容转发到另一个流(即Response.OutputStream )。


如果要创建zip文件服务器端(我认为这很容易),则可能需要查看System.IO.Compression.ZipFile类,该类提供了用于从现有文件创建档案的静态方法。

例如。 从服务器上的目录创建档案:

// In ASP.NET, getting the UNC path to the directory which will be zipped
string dirpath = Server.MapPath('~/app/foldertodownload');

// Destination path
string destpath = Server.MapPath('~/public/downloads.zip');

ZipFile.CreateFromDirectory(dirpath, destpath);

现在,您所需要做的就是使用适当的标头将此zip文件写入响应中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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