ZipOutputStream zipOutputStream 直接返回前端下载
时间: 2024-02-02 11:09:02 浏览: 56
以下是使用ZipOutputStream实现直接返回前端下载的示例代码:
```csharp
using ICSharpCode.SharpZip.Zip;
using System.IO;
using System.Web.Mvc;
public ActionResult DownloadFiles()
{
// 假设我们有一个文件列表
List<FileModel> fileList = new List<FileModel>();
fileList.Add(new FileModel { FilePath = "C:\\file1.txt", FileName = "file1.txt" });
fileList.Add(new FileModel { FilePath = "C:\\file2.txt", FileName = "file2.txt" });
fileList.Add(new FileModel { FilePath = "C:\\file3.txt", FileName = "file3.txt" });
// 创建一个内存流,用于存储压缩后的文件
MemoryStream ms = new MemoryStream();
ZipOutputStream zipOutputStream = new ZipOutputStream(ms);
// 设置压缩级别
zipOutputStream.SetLevel(9);
// 遍历文件列表,将每个文件添加到压缩包中
foreach (var file in fileList)
{
// 打开文件流
FileStream fs = new FileStream(file.FilePath, FileMode.Open, FileAccess.Read);
// 创建一个新的ZipEntry对象
ZipEntry entry = new ZipEntry(file.FileName);
// 将ZipEntry对象添加到压缩流中
zipOutputStream.PutNextEntry(entry);
// 将文件流写入压缩流中
byte[] buffer = new byte[4096];
int bytesRead;
do
{
bytesRead = fs.Read(buffer, 0, buffer.Length);
zipOutputStream.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
// 关闭文件流
fs.Close();
}
// 关闭压缩流
zipOutputStream.Finish();
zipOutputStream.Close();
// 将压缩后的文件写入Response中,实现直接返回前端下载
Response.Clear();
Response.ContentType = "application/zip";
Response.AddHeader("Content-Disposition", "attachment; filename=files.zip");
Response.BinaryWrite(ms.ToArray());
Response.End();
return null;
}
```
在上述代码中,我们首先创建了一个内存流,用于存储压缩后的文件。然后,我们创建了一个ZipOutputStream对象,并将其与内存流关联起来。接着,我们遍历文件列表,将每个文件添加到压缩包中。最后,我们将压缩后的文件写入Response中,实现直接返回前端下载。
阅读全文