AWS S3 で巨大なファイルをあるバケットから別のバケットにコピーする必要がある場合があります。可能な限り、CopyRequest を使用して、この操作をすべて AWS で処理します (クライアントへのラウンド トリップが必要ないため)。しかし、 GETとPUTを必要とする 2 つの完全に別個のアカウント間でコピーする必要があるため、これを行うオプションがない場合があります。
問題:
- GET から返された応答ストリームはシークできないため、PUT 要求に渡して、一方から他方へシームレスにストリーミングすることはできません。
- CopyTo() を使用して応答ストリームを中間ストリーム (MemoryStream) にコピーし、それを PUT 操作に渡すことはうまく機能しますが、スケーリングしません (大きなファイルは OutOfMemory 例外をスローします)。
したがって、基本的には、同時に読み書きできる中間ストリームが必要です。基本的には、応答ストリームからチャンクを読み取り、それを中間ストリームに書き込みます。その間、PUT リクエストはコンテンツを読み込んでいます。シームレスなパススルーのシナリオ。
この投稿をstackoverflowで見つけました。最初は有望に思えましたが、それでも大きなファイルでOutOfMemory例外がスローされます。
これに似たようなことをしなければならなかった人はいますか?どのように対処しますか?よろしくお願いします