2

使用 DotNetZip 时,是否可以在调用 Save(stream) 之前获得最终的 zip 文件大小?我有一个网站,用户将下载相当大的 zip 文件(超过 2 个演出),我希望能够将文件流式传输给用户,而不是将整个文件缓冲到内存中。像这样的东西...

response.BufferOutput = false;
response.AddHeader("Content-Length", ????);

这可能吗?

4

2 回答 2

3

如果流是同质的,您可能会浪费一些时间来压缩前面的“小”部分,计算压缩比并从中推断。

如果您打算设置内容长度标头或类似的东西,则只能在您(1)编写临时文件时完成(如果存在任何连接问题的风险并且客户端无论如何都请求特定块,则建议这样做)(2)可以将整个文件保存在内存中(大概只在具有大量内存的 64 位系统上)

当然,您可能会浪费大量资源并仅将流压缩两次,但我希望您同意这样做很愚蠢。

于 2011-03-23T09:57:53.760 回答
1

做你想做的事情的方法是将文件保存到临时文件系统文件,然后将结果流式传输给用户。这使您可以计算大小然后传输文件。

在这种情况下,dotnetzip 不会将文件保存到内存中。

于 2011-03-28T22:19:50.713 回答