我有一个PHP脚本,它使用copyObject
操作将文件从一个文件夹复制到S3存储桶中的另一个文件夹.但是,如果文件名包含百分号(%),则会导致400错误请求错误:
<Error><Code>InvalidArgument</Code><Message>Invalid copy source encoding</Message><ArgumentName>x-amz-copy-source</Argum (truncated...) InvalidArgument (client): Invalid copy source encoding - <Error><Code>InvalidArgument</Code><Message>Invalid copy source encoding</Message><ArgumentName>x-amz-copy-source</ArgumentName><ArgumentValue>x-amz-copy-source</ArgumentValue><RequestId>MJ6JPP4CJY87A4D2</RequestId><HostId>3iEO5xRKnpHhNAp+pTpGYUWgVEwP97k2qtQuJRTIiBKRL9KFGTMJLXUu8irha4PTtW2q3hWdxQA=</HostId></Error>'
个
有问题的文件名的一个例子是:id!@GB$%.jpg
相关的PHP代码:-
$filename = 'ID!@£$%.png';
$file_key = 'source/' . $filename;
$new_file_key = 'destination/' . $filename;
$bucketname = 'my-bucket';
$result = $client->copyObject(array(
'Bucket' => $bucketname,
'Key' => $new_file_key,
'CopySource' => $bucketname."/".($file_key),
'MetadataDirective' => 'COPY',
));
我还try 使用AWS CLI执行复制对象操作,它对以下文件名运行良好:
aws s3api copy-object --copy-source my-bucket/source/ID!@£$%.png --key destination/ID!@£$%.jpg --bucket my-bucket
有没有人能帮我找出我做错了什么?
谢谢.