使用Apache Camel上传文件到AWS S3时如何保留原文件名和文件类型
问题根因
你当前配置中为CamelAwsS3Key头设置了固定常量test,该头参数直接对应S3存储对象的键(即文件名),因此所有上传文件都会被重命名为test,缺少原始文件后缀自然无法被正常识别文件类型。
可行解决方案
1. 保留原始文件名上传
SFTP消费文件时,Apache Camel会自动将原始文件名存储在CamelFileName请求头中,你只需要将CamelAwsS3Key的取值改为该动态头即可:
<route> <from uri="sftp://testuser@localhost?password=test&delete=true" /> <setHeader name="CamelAwsS3Key"> <simple>${header.CamelFileName}</simple> </setHeader> <to uri="aws-s3://myTestBucket?accessKey=******&secretKey=RAW(******)&deleteAfterWrite=false&region=AP_SOUTH_1" /> </route>
2. 自定义命名规则(可选)
如果需要给S3文件增加自定义前缀/目录、或者加上时间戳等标识,可直接修改Simple表达式:
<!-- 示例:将文件存到S3的sftp_upload目录下,且加上时间戳前缀 --> <setHeader name="CamelAwsS3Key"> <simple>sftp_upload/${date:now:yyyyMMddHHmmss}_${header.CamelFileName}</simple> </setHeader>
3. 修复文件类型识别问题(可选)
如果修改文件名后仍无法正常识别文件类型,可额外设置CamelAwsS3ContentType头,让S3正确识别文件MIME类型:
<setHeader name="CamelAwsS3ContentType"> <!-- Camel会自动探测当前文件的MIME类型 --> <simple>${exchange.getProperty("CamelContentType")}</simple> </setHeader>
内容的提问来源于stack exchange,提问作者codeforHarman
相关产品推荐
相关产品推荐

