【问题标题】:How copy an existing object to same path Amazon S3如何将现有对象复制到同一路径 Amazon S3
【发布时间】:2022-06-15 20:48:26
【问题描述】:

您好,我想将现有对象复制到 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"
        )

我已登录请求。

发送请求:DefaultSdkHttpFullRequest(httpMethod=PUT, protocol=https, host=, port=443, encodedPath=, headers=[amz-sdk-invocation-id, User-Agent, x-amz-copy-source, x -amz-meta-directive、x-amz-meta-metadata-directive、x-amz-meta-MetadataDirective、x-amz-meta-x-amz-metadata-directive]、queryParameters=[])

但它不起作用。如何将现有对象复制到同一路径而不会出现此错误。

【问题讨论】:

  • 为什么要复制到同一个路径?这有什么作用?
  • 我有一个用例,我需要在周末跳过处理文件。但我的 S3 骆驼消费者,消费后自动删除文件。所以在周末我轮询并将文件复制到同一路径。如果我打开自动删除,那么我需要创建一个幂等消费者(这在我的场景中是多余的)
  • 您的调度程序不知道星期几?
  • 嗯,是的,其他选项是使用自定义调度程序。你知道如何在 Apache camel 中进行配置吗?
  • 你真的改变了与复制的对象有关的任何事情吗?您需要更改 something 例如文件名?请将请求和当前代码添加到问题中。

标签: java amazon-web-services amazon-s3 apache-camel aws-sdk-java-2.0


【解决方案1】:

我最终通过添加时间戳来更改文件名。现在我不再收到错误消息了。

但我认为,应该有一些方法可以通过 API 复制现有对象,因为我可以通过 aws-cli 做同样的事情

【讨论】:

    【解决方案2】:

    您是否查看过 Apache Camel AWS2 S3 组件中的 copyObject 操作? https://camel.apache.org/components/3.17.x/aws2-s3-component.html#_s3_producer_operation_examples

    有一个与使复制对象操作正常工作所需的标头相关的示例。

    【讨论】:

      猜你喜欢
      • 2013-05-29
      • 1970-01-01
      • 2011-09-12
      • 2013-05-29
      • 1970-01-01
      • 2023-02-24
      • 2018-04-07
      • 2017-06-03
      • 2021-07-19
      相关资源
      最近更新 更多