Camel 如何将现有对象复制到相同路径Amazon S3

noj0wjuj  于 2022-11-07  发布在  Apache
关注(0)|答案(3)|浏览(123)

您好,我想将现有对象复制到AWS S3中的同一路径,但遇到以下异常
此复制请求是非法的,因为它试图将对象复制到自身,而不更改对象的元数据、存储类、网站重定向位置或加密属性
我正在使用Apache camel S3,我如何解决这个问题。搜索后,我发现有一个请求头,我们可以用它来替换现有的文件,但它不工作

// multiple other attempts also present, I am not sure which header will work

exchange.`in`.headers[AWS2S3Constants.METADATA] = mutableMapOf(
            "x-amz-metadata-directive" to "REPLACE",
            "x-amz-meta-directive" to "REPLACE",
            "metadata-directive" to "REPLACE",
            "MetadataDirective" to "REPLACE"
        )

我已登录请求。
发送请求:默认SdkHttpFullRequest(httpMethod=PUT,协议=https,主机=,端口=443,编码路径=,头=[amz-sdk-调用ID,用户代理,x-amz-拷贝源,x-amz-元数据指令,x-amz-元数据指令,x-amz-元数据指令,x-amz-元数据指令],查询参数=[])
但是它不工作。我怎么能复制一个现有的对象到相同的路径而不得到这个错误。

kognpnkq

kognpnkq1#

我最终通过在文件名后添加时间戳来更改文件名。现在我不再收到错误。
但我认为,应该有一些方法通过API复制现有对象,因为我可以通过aws-cli做同样的事情

fykwrbwg

fykwrbwg2#

您是否查看过Apache Camel AWS2 S3组件中的copyObject操作?https://camel.apache.org/components/3.17.x/aws2-s3-component.html#_s3_producer_operation_examples
有一个与使“复制对象”操作正常工作所需的标头相关的示例。

0g0grzrc

0g0grzrc3#

$sourceBucket = '***Your Source Bucket Name***';
$sourceKeyname = '***Your Source Object Key***';
$targetBucket = '***Your Target Bucket Name***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Copy an object.
$s3->copyObject([
    'Bucket'     => $targetBucket,
    'Key'        => "{$sourceKeyname}-copy",
    'CopySource' => "{$sourceBucket}/{$sourceKeyname}",
]);

相关问题