[英]'AWS S3 Key header missing' error when trying to upload file to Amazon S3 Using Apache Camel
我正在嘗試使用 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])®ion=US_EAST_2&prefix=TEST.csv");
這會導致以下錯誤:
錯誤:java.lang.IllegalArgumentException:AWS S3 Key 標頭缺少 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])®ion=US_EAST_2");
這很好用,只要我願意在 setHeader 之后對所有內容進行硬編碼。 但是,對於我的特定用例,我需要從交換標頭傳遞項目以提供密鑰、存儲桶名稱和文件名(此路由由多個文件使用,這些文件根據交換標頭中收到的不同條件進入不同的存儲桶)。 出於某種原因,一旦使用 setHeader 設置 S3Constants.KEY,我就無法再訪問任何交換標頭 - 事實上,我什至無法從交換標頭分配 S3Constants.KEY 值。 如您所見, from 部分中的 fileName 是通過交換標頭分配的,我在那里沒有遇到任何問題,所以我知道它們正在被接收到路由中。
關於如何修改此路由以便我可以在沒有 S3Constants 的情況下上傳文件並在適當的情況下使用交換標頭的任何想法?
不確定我的理解是否正確,但在我看來
要定義動態目標地址,有一個“ dynamic to ”
.toD(...)
您可以在這樣的動態目標地址中使用例如簡單的表達式
.toD("aws-s3://${in.header.bucket}?region=${in.header.region}&...")
有關更多詳細信息,請參閱Camel 文檔(“動態到”部分)。
順便說一句:您寫的是“交換標題”。 不要將Exchange 屬性與消息頭混淆!
${in.header.myHeader}
而你得到與Exchange屬性${exchangeProperty.myProperty}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.