gpt4 book ai didi

asp.net - 使用 SharpZipLib 在 .net 中通过 http 流式传输 zip 文件

转载 作者:可可西里 更新时间:2023-11-01 15:09:38 26 4
gpt4 key购买 nike

我正在制作一个简单的下载服务,以便用户可以从站点下载他的所有图像。为此,我只需将所有内容压缩到 http 流。

然而,似乎所有内容都存储在内存中,并且在 zip 文件完成并关闭输出之前不会发送数据。我希望服务立即开始发送,而不是占用太多内存。

public void ProcessRequest(HttpContext context)
{
List<string> fileNames = GetFileNames();
context.Response.ContentType = "application/x-zip-compressed";
context.Response.AppendHeader("content-disposition", "attachment; filename=files.zip");
context.Response.ContentEncoding = Encoding.Default;
context.Response.Charset = "";

byte[] buffer = new byte[1024 * 8];

using (ICSharpCode.SharpZipLib.Zip.ZipOutputStream zipOutput = new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(context.Response.OutputStream))
{
foreach (string fileName in fileNames)
{
ICSharpCode.SharpZipLib.Zip.ZipEntry zipEntry = new ICSharpCode.SharpZipLib.Zip.ZipEntry(fileName);
zipOutput.PutNextEntry(zipEntry);
using (var fread = System.IO.File.OpenRead(fileName))
{
ICSharpCode.SharpZipLib.Core.StreamUtils.Copy(fread, zipOutput, buffer);
}
}
zipOutput.Finish();
}

context.Response.Flush();
context.Response.End();
}

我可以看到工作进程在创建文件时内存在增长,然后在发送完成后释放内存。如何在不使用太多内存的情况下执行此操作?

最佳答案

Disable response buffering使用 context.Response.BufferOutput = false; 并从代码末尾删除 Flush 调用。

关于asp.net - 使用 SharpZipLib 在 .net 中通过 http 流式传输 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/626196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com