6.6. 使用方法


例如,要从存储桶 helloBucket 读取文件 hello.txt,请使用以下片断:

from("aws2-s3://helloBucket?accessKey=yourAccessKey&secretKey=yourSecretKey&prefix=hello.txt")
  .to("file:/var/downloaded");

6.6.1. S3 producer 评估的消息标头

标头类型描述

CamelAwsS3BucketName

字符串

此对象的 bucket 名称将存储或用于当前操作

CamelAwsS3BucketDestinationName

字符串

用于当前操作的存储桶目标名称

CamelAwsS3ContentLength

Long

此对象的内容长度。

CamelAwsS3ContentType

字符串

此对象的内容类型。

CamelAwsS3ContentControl

字符串

此对象的内容控制。

CamelAwsS3ContentDisposition

字符串

此对象的内容分布。

CamelAwsS3ContentEncoding

字符串

此对象的内容编码。

CamelAwsS3ContentMD5

字符串

此对象的 md5 checksum。

CamelAwsS3DestinationKey

字符串

用于当前操作的 Destination 键

CamelAwsS3Key

字符串

此对象将存储或用于当前操作的密钥

CamelAwsS3LastModified

java.util.Date

此对象的最后修改的时间戳。

CamelAwsS3Operation

字符串

要执行的操作。允许的值有 copyObject, deleteObject, listBuckets, deleteBucket, listObjects

CamelAwsS3StorageClass

字符串

此对象的存储类。

CamelAwsS3CannedAcl

字符串

将应用于对象的 canned acl。请参阅 software.amazon.awssdk.services.s3.model.ObjectCannedACL 以了解允许的值。

CamelAwsS3Acl

software.amazon.awssdk.services.s3.model.BucketCannedACL

一个精心构建的 Amazon S3 Access Control List 对象。请参阅 software.amazon.awssdk.services.s3.model.BucketCannedACL

CamelAwsS3ServerSideEncryption

字符串

在使用 AWS 管理的密钥加密对象时设置服务器端加密算法。例如,使用 AES256。

CamelAwsS3VersionId

字符串

要存储或从当前操作返回的对象的版本 Id

CamelAwsS3Metadata

Map<String, String>

要与 S3 中对象存储的元数据映射。有关元数据的更多详细信息。

6.6.2. S3 producer 设置的消息标头

标头类型描述

CamelAwsS3ETag

字符串

新上传对象的 ETag 值。

CamelAwsS3VersionId

字符串

新上传对象的可选版本 ID。

6.6.3. S3 使用者设置的消息标头

标头类型描述

CamelAwsS3Key

字符串

存储此对象的密钥。

CamelAwsS3BucketName

字符串

包含此对象的存储桶的名称。

CamelAwsS3ETag

字符串

根据 RFC 1864,对相关对象的十六进制编码的 128 位 MD5 摘要。此数据用作完整性检查,以验证调用者收到的数据是否与 Amazon S3 发送的数据相同。

CamelAwsS3LastModified

Date

Last-Modified 标头的值,指示 Amazon S3 最后记录对关联对象的修改的日期和时间。

CamelAwsS3VersionId

字符串

关联的 Amazon S3 对象的版本 ID (如果可用)。只有当对象上传到启用了对象版本控制的 Amazon S3 存储桶时,才会将版本 ID 分配给对象。

CamelAwsS3ContentType

字符串

Content-Type HTTP 标头,它表示存储在关联对象中的内容类型。此标头的值是标准 MIME 类型。

CamelAwsS3ContentMD5

字符串

根据 RFC 1864,使用 base64 编码的相关对象(content - 不包括标头)的 base64 编码的 128 位 MD5 摘要。此数据用作消息完整性检查,以验证 Amazon S3 收到的数据是否与调用者发送的数据相同。

CamelAwsS3ContentLength

Long

Content-Length HTTP 标头表示关联对象的大小(以字节为单位)。

CamelAwsS3ContentEncoding

字符串

可选的 Content-Encoding HTTP 标头指定将什么内容编码应用到对象,必须应用哪些解码机制来获取 Content-Type 字段引用的 media-type。

CamelAwsS3ContentDisposition

字符串

可选的 Content-Disposition HTTP 标头,它指定要保存的对象的建议文件名等。

CamelAwsS3ContentControl

字符串

可选的 Cache-Control HTTP 标头,允许用户在 HTTP 请求/恢复链中指定缓存行为。

CamelAwsS3ServerSideEncryption

字符串

使用 AWS 管理的密钥加密对象时的服务器端加密算法。

CamelAwsS3Metadata

Map<String, String>

与 S3 中对象存储的元数据映射。有关元数据的更多详细信息。

6.6.4. S3 Producer 操作

Camel-AWS2-S3 组件在生成者端提供以下操作:

  • copyObject
  • deleteObject
  • listBuckets
  • deleteBucket
  • listObjects
  • GetObject (这将返回 S3Object 实例)
  • getObjectRange (这将返回 S3Object 实例)
  • createDownloadLink

如果您没有显式指定生成者将执行的操作: - 单个文件上传 - 如果启用了 multiPartUpload 选项,则多部分上传。

6.6.5. 高级 AmazonS3 配置

如果您的 Camel 应用程序在防火墙后面运行,或者需要对 S3Client 实例配置拥有更多控制,您可以创建自己的实例,并在 Camel aws2-s3 组件配置中引用它:

from("aws2-s3://MyBucket?amazonS3Client=#client&delay=5000&maxMessagesPerPoll=5")
.to("mock:result");

6.6.6. 将 KMS 与 S3 组件一起使用

要使用 AWS KMS 加密/解密数据,您可以使用 2.21.x 中引入的选项,如下例所示

from("file:tmp/test?fileName=test.txt")
     .setHeader(S3Constants.KEY, constant("testFile"))
     .to("aws2-s3://mybucket?amazonS3Client=#client&useAwsKMS=true&awsKMSKeyId=3f0637ad-296a-3dfe-a796-e60654fb128c");

这样,您将要求 S3 使用 KMS 密钥 3f0637ad-296a-3dfe-a796-e60654fb128c 来加密文件 test.txt。当您要求下载该文件时,将在下载前直接进行解密。

6.6.7. 静态凭证和默认凭证提供程序

您可以通过指定 useDefaultCredentialsProvider 选项并将其设置为 true 来避免使用显式静态凭证。

  • Java 系统属性 - aws.accessKeyId 和 aws.secretKey
  • 环境变量 - AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。
  • AWS STS 的 Web Identity Token。
  • 共享凭证和配置文件。
  • Amazon ECS 容器凭证 - 如果设置了环境变量 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI,则从 Amazon ECS 加载。
  • Amazon EC2 实例配置集凭据。

有关此信息的更多信息,您可以查看 AWS 凭证文档

6.6.8. S3 Producer 操作示例

  • 单上传:此操作将根据正文内容上传文件到 S3
  from("direct:start").process(new Processor() {

      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(S3Constants.KEY, "camel.txt");
          exchange.getIn().setBody("Camel rocks!");
      }
  })
  .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client")
  .to("mock:result");

此操作将上传文件 camel.txt,其内容为 mycamelbucket bucket 中的内容 "Camel rocks!"

  • 多部分上传:此操作将根据正文内容执行文件的多部分上传到 S3
  from("direct:start").process(new Processor() {

      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(AWS2S3Constants.KEY, "empty.txt");
          exchange.getIn().setBody(new File("src/empty.txt"));
      }
  })
  .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&multiPartUpload=true&autoCreateBucket=true&partSize=1048576")
  .to("mock:result");

此操作将执行文件 empty.txt 的多部分上传,它基于 mycamelbucket bucket 中文件 src/empty.txt 的内容

  • CopyObject:此操作将对象从一个存储桶复制到不同的存储桶
  from("direct:start").process(new Processor() {

      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(S3Constants.BUCKET_DESTINATION_NAME, "camelDestinationBucket");
          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
          exchange.getIn().setHeader(S3Constants.DESTINATION_KEY, "camelDestinationKey");
      }
  })
  .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=copyObject")
  .to("mock:result");

此操作会将带有标头 camelDestinationKey 中的名称的对象复制到 Bucket mycamelbucket 中的 camelDestinationBucket 存储桶。

  • DeleteObject:此操作从存储桶中删除对象
  from("direct:start").process(new Processor() {

      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
      }
  })
  .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteObject")
  .to("mock:result");

此操作将从 bucket mycamelbucket 中删除对象 camelKey。

  • ListBuckets:此操作列出了此区域中此帐户的存储桶
  from("direct:start")
  .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=listBuckets")
  .to("mock:result");

此操作将列出此帐户的存储桶

  • DeleteBucket:此操作删除指定为 URI 参数或标头的存储桶
  from("direct:start")
  .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteBucket")
  .to("mock:result");

此操作将删除存储桶 mycamelbucket

  • ListObjects :此操作列表在特定存储桶中的对象
  from("direct:start")
  .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=listObjects")
  .to("mock:result");

此操作将列出 mycamelbucket bucket 中的对象

  • GetObject:此操作获取特定存储桶中的单个对象
  from("direct:start").process(new Processor() {

      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
      }
  })
  .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObject")
  .to("mock:result");

此操作将返回与 mycamelbucket bucket 中 camelKey 对象相关的 S3Object 实例。

  • GetObjectRange:此操作获得特定存储桶中的单个对象范围
  from("direct:start").process(new Processor() {

      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
          exchange.getIn().setHeader(S3Constants.RANGE_START, "0");
          exchange.getIn().setHeader(S3Constants.RANGE_END, "9");
      }
  })
  .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObjectRange")
  .to("mock:result");

此操作将返回与 mycamelbucket bucket 中 camelKey 对象相关的 S3Object 实例,其中包含从 0 到 9 的字节数。

  • CreateDownloadLink:此操作将通过 S3 Presigner 返回下载链接
  from("direct:start").process(new Processor() {

      @Override
      public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(S3Constants.KEY, "camelKey");
      }
  })
  .to("aws2-s3://mycamelbucket?accessKey=xxx&secretKey=yyy&region=region&operation=createDownloadLink")
  .to("mock:result");

此操作将返回存储桶 mycamelbucket 和 region 区域中的 camel-key 文件的下载链接 url

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.