当前位置: 首页 > 知识库问答 >
问题:

尝试使用Apache Camel将文件上传到Amazon S3时出错

淳于坚壁
2023-03-14

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

参考这里找到的留档(https://camel.apache.org/staging/components/latest/aws-s3-component.html),我试图创建一个简单的路线,就像这样(我当然删除了密钥和其他识别信息,并将其替换为[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密钥头缺少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之后硬编码所有内容。但是,对于我的特定用例,我需要从exchange标头传递项目,以提供键、bucket name和fileName(多个文件使用此路由,这些文件根据exchange标头中接收到的不同标准,进入不同的bucket)。出于某种原因,只要使用setHeader设置S3常量。键,我再也不能访问任何exchange标头了——事实上,我甚至不能分配S3常量。exchange标头中的键值。正如您所看到的,from部分中的文件名是通过exchange头分配的,我在那里没有遇到任何问题,因此我知道它们正在被路由接收。

关于如何修改此路由,使其允许我在不使用S3常量的情况下上载文件,并在适当的情况下使用exchange标头,有何想法?

共有1个答案

和飞翔
2023-03-14

不知道我是否理解正确,但在我看来

  • 问题主题的问题已经解决了

要定义动态目标地址,有一个“动态到”

.toD(...)

例如,您可以在这样一个动态的目标地址中使用简单的表达式

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

有关更多详细信息,请参阅Camel文档(“动态到”部分)。

顺便说一句:你写的是“交换头”。不要将Exchange属性与邮件标题混淆!

  • Exchange属性仅在Exchange包装器上,因此在骆驼路由完成处理后,Exchange会丢失这些属性
 类似资料:
  • 我需要将文件从文件夹同步到restendpoint。因此,如果文件被放置在特定文件夹中,我需要将该文件发送到接受多部分文件的RESTendpoint。我正在使用ApacheCamel来实现这一点。 RESTendpoint在Spring中编写,如下所示: 我是Camel的新手,并且已经弄清楚了如何通过构建路由并获取文件来轮询目录,但是我无法弄清楚如何使用此路由将此文件放入其余endpoint。这是

  • 您上载的APK签名无效(了解有关签名的更多信息)。来自apksigner的错误:Error(Jar signer cert.rsa):Jar签名meta-inf/cert.sf表明APK是使用APK签名方案v2签名的,但是没有找到这样的签名。签名被剥了?

  • 我试图使用以下命令将第三方jar部署到sonatype nexus存储库: 我得到以下错误: [error]在当前项目和插件组[org.apache.maven.plugins,org.codehaus.mojo]中找不到前缀“–Durl=http”的插件,这些插件组可从中央存储库[local(/Users/ssurendran/.m2/repository)获得(https://repo.mav

  • 我的项目正在尝试使用aws-java-sdk-1.11.15将文件上传到Amazon S3。我正在使用ant在CLI上构建我的项目。我使用的杰克逊版本是2.8.0。我正在将我的lib文件夹添加到我的类路径中。我所有的jar文件都在我的lib文件夹中。我在运行我的代码时得到以下信息- 对于这段代码- 错误在s3client中。putObject(新PutObjectRequest(bucketNam

  • 我上传一个文件到AmazonS3有问题。我开发了一个Grails RESTful服务,它使用AWS Java SDK生成预签名URL。当客户端上传一个文件时,它首先检索一个预签名的URL,然后使用这个将文件直接上传到我的S3 bucket。所以我有一个Grails服务,它创建了一个预签名的URL,如下所示...