我將文件從JS前端上傳到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' })
沒有人有一個想法,爲什麼複製源文件未找到?密鑰中是否包含禁止使用的字符,還是必須對它們進行不同的編碼?
我必須同意一件事。這是給我見過的S3對象最難聽的名字:-D。 –
錯誤沒有說源對象沒有找到。它說這個論點是「無效的」和「不受支持的」。您是否驗證了錯誤響應將使用不存在的簡單(僅字母數字ASCII)源對象密鑰? –
哦,你說得對。 NoSuchKey是不存在的鍵的錯誤。 – Stephan