【发布时间】:2012-08-14 01:34:29
【问题描述】:
有时我们需要在 AWS S3 中将大文件从一个存储桶复制到另一个存储桶。我们尽可能在 AWS 上使用 CopyRequest 来处理此操作(因为不需要返回客户端)。但有时我们没有这样做的选项,因为我们需要在两个完全独立的帐户之间进行复制,这需要GET,然后是PUT。
问题:
- 从 GET 返回的响应流不可搜索,因此无法传递给 PUT 请求并使其无缝地从一个流向另一个
- 使用 CopyTo() 将响应流复制到中间流 (MemoryStream),然后将其传递给 PUT 操作效果很好,但无法扩展(大文件会引发 OutOfMemory 异常)
所以基本上我需要一个可以同时读/写的中间流,基本上我会从响应流中读取一个块并将其写入我的中间流,同时 PUT 请求正在读取内容和它只是一种无缝的直通场景。
我在 stackoverflow 上找到了这篇文章,起初它看起来很有希望,但它仍然会引发大文件的 OutOfMemory 异常。
.NET Asynchronous stream read/write
有人做过类似的事情吗?你将如何应对?提前感谢
【问题讨论】:
-
这接近 BufferedStream。除了 seek,如果输入流不支持则不支持。目前还不是很清楚为什么需要搜索以及需要可搜索的范围。