有时,我们需要在 AWS S3 中将大文件从一个存储桶复制到另一个存储桶。只要有可能,我们就使用 CopyRequest 来处理所有在 AWS 上的操作(因为不需要返回客户端的往返)。但有时我们没有选择这样做,因为我们需要在 2 个完全独立的帐户之间复制,这需要GET和PUT。
问题:
所以基本上我需要一个可以同时读/写的中间流,基本上我会从响应流中读取一个块并将其写入我的中间流,同时 PUT 请求正在读出内容,它只是一个无缝直通类场景。
我在 stackoverflow 上发现了这篇文章,起初看起来很有希望,但它仍然会抛出 OutOfMemory 异常,其中包含大文件。
有人曾经做过类似的事情吗?你会如何处理?提前致谢
目前尚不清楚您为什么要使用MemoryStream. .NET 4 中的方法Stream.CopyTo不需要使用中间流 - 它只会读入固定大小的本地缓冲区,然后将该缓冲区写入输出流,然后读取更多数据(覆盖缓冲区)等。
如果您不使用 .NET 4,很容易实现类似的东西,例如
public static void CopyTo(this Stream input, Stream output)
{
byte[] buffer = new byte[64 * 1024]; // 64K buffer
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5371 次 |
| 最近记录: |