gpt4 book ai didi

java - 尝试使用 Apache Camel 将文件上传到 Amazon S3 时出现“AWS S3 Key header missing”错误

转载 作者:行者123 更新时间:2023-11-30 10:01:18 28 4
gpt4 key购买 nike

我正在尝试使用 Apache Camel 将 csv 文件从本地目录上传到 AWS S3。

引用此处找到的文档 ( https://camel.apache.org/staging/components/latest/aws-s3-component.html ),我尝试创建一个像这样的简单路由(我当然删除了 key 和其他识别信息并将它们替换为 [FAKE_INFO]):

from("file:fileName=${in.headers[fileName]}")
.to("aws-s3://[BUCKET]?accessKey=[ACCESS_KEY]&secretKey=RAW([SECRET_KEY])&region=US_EAST_2&prefix=TEST.csv");

这会导致以下错误:

错误:java.lang.IllegalArgumentException:AWS S3 Key header missing apache camel

在网上搜索了一下之后,我删除了传递的前缀,而是插入了一个 .setHeader 来路由,如下所示:

from("file:fileName=${in.headers[fileName]}")
.setHeader(S3Constants.KEY, simple("TEST.csv"))
.to("aws-s3://[BUCKET]?accessKey=[ACCESS_KEY]&secretKey=RAW([SECRET_KEY])&region=US_EAST_2");

这很好用,只要我愿意在 setHeader 之后对所有内容进行硬编码。但是,对于我的特定用例,我需要从交换 header 传递项目以提供 key 、存储桶名称和文件名(此路由由多个文件使用,这些文件根据交换 header 中接收到的不同标准转到不同的存储桶).出于某种原因,一旦使用 setHeader 设置 S3Constants.KEY,我就无法再访问任何交换 header - 事实上,我什至无法从交换 header 分配 S3Constants.KEY 值。如您所见,from 部分中的文件名是通过交换 header 分配的,我在那里没有遇到任何问题,所以我知道它们正在被接收到路由中。

关于如何修改此路由以便它允许我在不使用 S3Constants 并在适当的地方使用交换 header 的情况下上传文件的任何想法?

最佳答案

不确定我的理解是否正确,但我觉得是这样

  • 题主的问题已经解决了
  • 你唯一的问题是静态你想要动态的目标地址

要定义动态目标地址,有一个“dynamic to

.toD(...)

您可以使用例如 simple expressions在这样一个动态的目标地址中

.toD("aws-s3://${in.header.bucket}?region=${in.header.region}&...")

参见 Camel Docs (“动态到”部分)了解更多详细信息。

By the way: you write about "exchange headers". Don't confuse Exchange properties with Message headers!

  • Exchange 属性仅在 Exchange 包装器上,因此在 Camel 路由完成处理后随 Exchange 一起丢失。
  • 消息 header 在消息本身上,因此即使在将消息路由到队列或任何端点之后,它们也会保留在消息上。这也意味着 header 必须是可序列化的。
  • 您必须以不同方式访问这两种类型。例如,在 Simple 中,您从带有 ${in.header.myHeader} 的入站消息中获取 header 。当您使用 ${exchangeProperty.myProperty} 获得 Exchange 属性时

关于java - 尝试使用 Apache Camel 将文件上传到 Amazon S3 时出现“AWS S3 Key header missing”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57501484/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com