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