使用 DotNetZip 时,是否可以在调用 Save(stream) 之前获得最终的 zip 文件大小?我有一个网站,用户将下载相当大的 zip 文件(超过 2 个演出),我希望能够将文件流式传输给用户,而不是将整个文件缓冲到内存中。像这样的东西...
response.BufferOutput = false;
response.AddHeader("Content-Length", ????);
这可能吗?
如果流是同质的,您可能会浪费一些时间来压缩前面的“小”部分,计算压缩比并从中推断。
如果您打算设置内容长度标头或类似的东西,则只能在您(1)编写临时文件时完成(如果存在任何连接问题的风险并且客户端无论如何都请求特定块,则建议这样做)(2)可以将整个文件保存在内存中(大概只在具有大量内存的 64 位系统上)
当然,您可能会浪费大量资源并仅将流压缩两次,但我希望您同意这样做很愚蠢。
做你想做的事情的方法是将文件保存到临时文件系统文件,然后将结果流式传输给用户。这使您可以计算大小然后传输文件。
在这种情况下,dotnetzip 不会将文件保存到内存中。