You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Apache Camel上传文件到AWS S3时如何保留原文件名和文件类型

问题根因

你当前配置中为CamelAwsS3Key头设置了固定常量test,该头参数直接对应S3存储对象的键(即文件名),因此所有上传文件都会被重命名为test,缺少原始文件后缀自然无法被正常识别文件类型。

可行解决方案

1. 保留原始文件名上传

SFTP消费文件时,Apache Camel会自动将原始文件名存储在CamelFileName请求头中,你只需要将CamelAwsS3Key的取值改为该动态头即可:

<route>
    <from uri="sftp://testuser@localhost?password=test&amp;delete=true" />
    <setHeader name="CamelAwsS3Key">
        <simple>${header.CamelFileName}</simple>
    </setHeader>
    <to uri="aws-s3://myTestBucket?accessKey=******&amp;secretKey=RAW(******)&amp;deleteAfterWrite=false&amp;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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:36:03