JS-FrontendからAmazon S3にファイルをアップロードしました。 Rubyにaws-sdk-s3を使用すると、オブジェクトを別のバケットに移動しようとします。私はこのためにAws::S3::Client#copy_object
を使用しています。Amazon S3 copy_objectキーが見つかりません - エンコーディングの問題?
テストの目的で、{}?^°!#*äÄÜ?=)(;:- &%$§%2! |<>.jpg
という名前のファイルをアップロードしました。特別な文字を含まないファイルはすべて動作しますが、このファイルを移動するとAws::S3::Errors::InvalidArgument Exception: Unsupported copy source parameter
というエラーが発生します。
ファイルがその名前で私のS3-Bucketに存在することを確認しました。オブジェクトキーをさまざまな方法でエンコーディング(CGI.escape、URI.escape、URI.encode)しても役に立ちませんでした。
スニペットは次のようになります。
s3 = Aws::S3::Client.new(region: ENV['AWS_REGION'])
source_key = "{}?^°!#*äÄÜ?=)(;:- &%$§%2! |<>.jpg"
s3.copy_object({ copy_source: 'mybucket1/' + source_key,
bucket: 'mybucket2',
key: 'new_file_name.jpg' })
誰もがコピー元が見つからない理由を考えて、持っていますか?キーに禁止された文字が含まれているのですか、違う文字をエンコードする必要がありますか?
私は1つのことに同意しなければなりません。これは私が見たs3オブジェクトに与えられた最も奇妙な名前です:-D。 –
エラーは、ソースオブジェクトが見つからないとは限りません。議論は「無効」であり、「サポートされていない」と述べている。存在しない単純な(つまり英数字のASCIIのみの)ソースオブジェクトキーを使用して、エラー応答の内容を確認しましたか? –
ああ、そうです。 NoSuchKeyは、存在しないキーのエラーです。 – Stephan