我需要创建一个服务,该服务返回一个由一个或多个文件组成的 GZipStream。文件数量可能有数百个,每个文件可能占用超过 500MB。

是否可以在传输流时以某种方式将文件动态添加到 gzipstream? (避免在需要将文件复制到流中时遇到内存不足异常)

等等:

  • 将 fileA 复制到正在返回的流中。
  • 客户端开始读取流。
  • 读取文件A(客户端)后,将文件B 复制到流(服务器端)。
  • 客户端继续读取流。

  • ...依此类推,直到没有更多文件。

    顺便提一句。文件是否被压缩并不重要,重要的是它们被组合成一个 zip 文件,这样客户端只需下载一个文件。

    所以我的目标是:将多个文件作为一个单独的文件流回客户端,而不在服务器上一次处理所有文件(以避免将所有文件加载到内存中,从而引发内存不足异常)。

    这可以通过以某种方式创建自定义流来完成还是有更简单的方法?

    谢谢。

    最佳答案

    您可以将这些文件合并为磁盘上的单个 zip 文件,然后将该文件流式传输回去。

    有关如何将文件合并为 zip 文件的信息,请参阅:c# sharpziplib adding file to existing archive

    这解决了内存不足问题,但这确实意味着您需要大量磁盘空间。

    10-08 05:04