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

这可能吗?

有帮助吗?

解决方案

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

如果要设置内容长度标头或类似内容,则只能在以下情况下完成:(1)编写一个临时文件(如果存在连接故障的风险并且客户端仍然请求特定块,则建议这样做)(2)可以将整个文件保存在内存中(大概在具有足够内存的64位系统上)

当然,您可能会浪费大量资源,只是将流压缩两次,但是我希望您同意这是愚蠢的。

其他提示

执行所需操作的方法是将文件保存到临时文件系统文件,然后将结果流式传输给用户。这使您可以计算大小然后传输文件。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top