我有一个文件列表,其中包含每个文件的复选框,如果用户检查了很多文件并点击下载,我必须压缩所有这些文件并下载...就像在邮件附件中一样..
我使用了此post for single file download
中提到的代码请帮助如何将多个文件下载为zip ..
答案 0 :(得分:25)
您需要打包文件并将结果写入响应。 您可以使用SharpZipLib压缩库。
代码示例:
Response.AddHeader("Content-Disposition", "attachment; filename=" + compressedFileName + ".zip");
Response.ContentType = "application/zip";
using (var zipStream = new ZipOutputStream(Response.OutputStream))
{
foreach (string filePath in filePaths)
{
byte[] fileBytes = System.IO.File.ReadAllBytes(filePath);
var fileEntry = new ZipEntry(Path.GetFileName(filePath))
{
Size = fileBytes.Length
};
zipStream.PutNextEntry(fileEntry);
zipStream.Write(fileBytes, 0, fileBytes.Length);
}
zipStream.Flush();
zipStream.Close();
}
答案 1 :(得分:4)
这是如何使用DotNetZip的方式:D我为DotNetZip担保,因为我已经使用过它,它是迄今为止最简单的C#压缩库我已经遇到过:)
检查http://dotnetzip.codeplex.com/
http://dotnetzip.codeplex.com/wikipage?title=CS-Examples&referringTitle=Examples
在ASP.NET中创建可下载的zip。此示例在ASP.NET回发方法中动态创建zip,然后通过Response.OutputStream将该zipfile下载到请求的浏览器。在磁盘上永远不会创建zip存档。
public void btnGo_Click (Object sender, EventArgs e)
{
Response.Clear();
Response.BufferOutput= false; // for large files
String ReadmeText= "This is a zip file dynamically generated at " + System.DateTime.Now.ToString("G");
string filename = System.IO.Path.GetFileName(ListOfFiles.SelectedItem.Text) + ".zip";
Response.ContentType = "application/zip";
Response.AddHeader("content-disposition", "filename=" + filename);
using (ZipFile zip = new ZipFile())
{
zip.AddFile(ListOfFiles.SelectedItem.Text, "files");
zip.AddEntry("Readme.txt", "", ReadmeText);
zip.Save(Response.OutputStream);
}
Response.Close();
}
答案 2 :(得分:1)
答案 3 :(得分:0)
我所知道的3个库是SharpZipLib(多种格式),DotNetZip(所有ZIP)和ZipStorer(小型和紧凑型)。没有链接,但它们都在codeplex上,并通过谷歌找到。许可证和确切功能各不相同。
快乐的编码。