【问题标题】:Generate and stream Zip archive without storing it in the filesystem or reading into memory first生成和流式传输 Zip 存档,无需将其存储在文件系统中或先读入内存
【发布时间】:2014-02-09 18:08:23
【问题描述】:

如何异步获取多个现有流(来自 db),将它们添加到 zip 存档流并在 asp.net web api 2 中返回?

与其他“重复”问题的主要区别在于如何以流方式执行此操作,而无需先将其写入临时文件或将其完全缓冲在内存中。

【问题讨论】:

  • 没有先读入内存?你想用什么样的魔法?
  • @Joe Stead:通过将其从数据库流式传输到 zip 输出流中。不需要魔法。
  • @Jonesy:感谢您提供了一个良好的起点。这不是异步的,但至少你是有建设性的。
  • 客户端应该在我第一次写入响应流时开始读取它。在响应客户端之前,我不想将整个 zip 文件写入缓冲的内存流。

标签: c# asp.net-web-api .net-4.5 async-await asp.net-web-api2


【解决方案1】:

看来你不能直接这样做

Writing to ZipArchive using the HttpContext OutputStream

http 响应流需要支持寻找要直接写入的 zip,而它不支持。看起来需要写入一个临时文件。

【讨论】:

  • 我已将an answer 添加到描述问题以及如何解决该问题的问题中。
  • 该答案回答了我的大部分问题。我们现在可以让它异步吗?
  • 我不确定这是否真的会对您有所帮助,但ZipArchiveEntry.Open() 返回的Stream 可以异步使用。
  • 我想我会尝试通过从数据库异步读取来使我的控制器操作异步,并且可能让 zip 内容保持同步。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
  • 2019-10-20
  • 2015-07-13
  • 2019-06-13
  • 2012-08-27
  • 1970-01-01
相关资源
最近更新 更多