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 评估的消息标头
标头 | 类型 | 描述 |
---|---|---|
|
| 此对象的 bucket 名称将存储或用于当前操作 |
|
| 用于当前操作的存储桶目标名称 |
|
| 此对象的内容长度。 |
|
| 此对象的内容类型。 |
|
| 此对象的内容控制。 |
|
| 此对象的内容分布。 |
|
| 此对象的内容编码。 |
|
| 此对象的 md5 checksum。 |
|
| 用于当前操作的 Destination 键 |
|
| 此对象将存储或用于当前操作的密钥 |
|
| 此对象的最后修改的时间戳。 |
|
| 要执行的操作。允许的值有 copyObject, deleteObject, listBuckets, deleteBucket, listObjects |
|
| 此对象的存储类。 |
|
|
将应用于对象的 canned acl。请参阅 |
|
|
一个精心构建的 Amazon S3 Access Control List 对象。请参阅 |
| 字符串 | 在使用 AWS 管理的密钥加密对象时设置服务器端加密算法。例如,使用 AES256。 |
|
| 要存储或从当前操作返回的对象的版本 Id |
|
| 要与 S3 中对象存储的元数据映射。有关元数据的更多详细信息。 |
6.6.2. S3 producer 设置的消息标头
标头 | 类型 | 描述 |
---|---|---|
|
| 新上传对象的 ETag 值。 |
|
| 新上传对象的可选版本 ID。 |
6.6.3. S3 使用者设置的消息标头
标头 | 类型 | 描述 |
---|---|---|
|
| 存储此对象的密钥。 |
|
| 包含此对象的存储桶的名称。 |
|
| 根据 RFC 1864,对相关对象的十六进制编码的 128 位 MD5 摘要。此数据用作完整性检查,以验证调用者收到的数据是否与 Amazon S3 发送的数据相同。 |
|
| Last-Modified 标头的值,指示 Amazon S3 最后记录对关联对象的修改的日期和时间。 |
|
| 关联的 Amazon S3 对象的版本 ID (如果可用)。只有当对象上传到启用了对象版本控制的 Amazon S3 存储桶时,才会将版本 ID 分配给对象。 |
|
| Content-Type HTTP 标头,它表示存储在关联对象中的内容类型。此标头的值是标准 MIME 类型。 |
|
| 根据 RFC 1864,使用 base64 编码的相关对象(content - 不包括标头)的 base64 编码的 128 位 MD5 摘要。此数据用作消息完整性检查,以验证 Amazon S3 收到的数据是否与调用者发送的数据相同。 |
|
| Content-Length HTTP 标头表示关联对象的大小(以字节为单位)。 |
|
| 可选的 Content-Encoding HTTP 标头指定将什么内容编码应用到对象,必须应用哪些解码机制来获取 Content-Type 字段引用的 media-type。 |
|
| 可选的 Content-Disposition HTTP 标头,它指定要保存的对象的建议文件名等。 |
|
| 可选的 Cache-Control HTTP 标头,允许用户在 HTTP 请求/恢复链中指定缓存行为。 |
| 字符串 | 使用 AWS 管理的密钥加密对象时的服务器端加密算法。 |
|
| 与 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®ion=region&operation=createDownloadLink") .to("mock:result");
此操作将返回存储桶 mycamelbucket 和 region 区域中的 camel-key 文件的下载链接 url