私の知る限り、名前の変更や移動操作はありません。そのため、ファイルを新しい場所にコピーし、古い場所を削除する必要があります。
その通りです。5 GB 未満のオブジェクト/ファイルの場合は、PUT オブジェクト - コピー操作の後にDELETE オブジェクト操作を行うことで非常に簡単に行うことができます (どちらももちろんbotoでサポートされています。copy_key()とdelete_key(を参照)。 ) ):
この PUT オペレーションの実装は、Amazon S3 にすでに保存されているオブジェクトのコピーを作成します。PUT コピー操作は、GET を実行してから PUT を実行するのと同じです。リクエスト ヘッダー x-amz-copy-source を追加すると、PUT 操作でソース オブジェクトが宛先バケットにコピーされます。
ただし、5 GB を超えるオブジェクト/ファイルの場合、実際には不可能です。
注
[...] この API を使用して、1 回のアトミック操作で最大 5 GB のサイズのオブジェクトのコピーを作成します。ただし、5 GB を超えるオブジェクトをコピーするには、マルチパート アップロード API を使用する必要があります。概念的な情報 [...] については、マルチパート アップロードを使用したオブジェクトのアップロード[...] [emphasis mine] を参照してください。
一方、Boto はcopy_part_from_key()メソッドを使用してこれをサポートします。残念ながら、必要なアプローチは、それぞれのプル リクエスト #425 (マルチパート コピー コマンドを許可する)以外では文書化されていません (ただし、私自身はまだ試していません)。
import boto
s3 = boto.connect_s3('access', 'secret')
b = s3.get_bucket('destination_bucket')
mp = b.initiate_multipart_upload('tmp/large-copy-test.mp4')
mp.copy_part_from_key('source_bucket', 'path/to/source/key', 1, 0, 999999999)
mp.copy_part_from_key('source_bucket', 'path/to/source/key', 2, 1000000000, 1999999999)
mp.copy_part_from_key('source_bucket', 'path/to/source/key', 3, 2000000000, 2999999999)
mp.copy_part_from_key('source_bucket', 'path/to/source/key', 4, 3000000000, 3999999999)
mp.copy_part_from_key('source_bucket', 'path/to/source/key', 5, 4000000000, 4999999999)
mp.copy_part_from_key('source_bucket', 'path/to/source/key', 6, 5000000000, 5500345712)
mp.complete_upload()
最終的に Java または .NET でこれを実現する方法については、それぞれのサンプルを調べることをお勧めします。これにより、一般的なアプローチについてより多くの洞察が得られる可能性があり ます。マルチパート アップロード API を使用したオブジェクトのコピー を参照してください。
幸運を!
付録
一般的に見落とされがちな、コピーに関する次の特性に注意してください。
オブジェクトをコピーする場合、ほとんどのメタデータを保持するか (デフォルト)、新しいメタデータを指定できます。ただし、ACL は保持されず、リクエストを行うユーザーに対して非公開に設定されます。デフォルトの ACL 設定を上書きするには、x-amz-acl ヘッダーを使用して、コピー リクエストの生成時に新しい ACL を指定します。詳細については、Amazon S3 ACL を参照してください。[鉱山を強調]