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

从FTP复制大文件时重复执行出现内容覆盖问题求助

解决Camel FTP重复下载覆盖本地文件的问题

核心原因

默认配置下,Camel FTP组件每次执行都会拉取服务器上的目标文件,不管本地是否已存在,直接覆盖。你之前尝试的.done扩展名如果用错了配置逻辑,自然起不到效果。

可行解决方案

方案1:服务器端移走已下载文件(彻底避免重复拉取)

在FTP的from URI中添加move参数,下载完成后将服务器上的源文件移动到指定目录(比如.done子目录),这样下次路由执行时就不会再拉取该文件。

修改后的路由配置:

<route id="ftp">
    <from uri="ftp://xxx@myftp.com/ftp-test/?password=mypassword&move=.done/${file:name}"/>
    <to uri="file://filepath/temp"/>
</route>
  • 效果:下载后服务器上的xxx.txt会被移到ftp-test/.done/xxx.txt,后续路由执行不会再处理这个文件,本地也就不会被覆盖。

方案2:本地保存时自动重命名(保留多次下载版本)

如果需要保留每次下载的文件副本,给本地文件名添加时间戳或唯一标识,确保文件名不重复。

修改后的路由配置:

<route id="ftp">
    <from uri="ftp://xxx@myftp.com/ftp-test/?password=mypassword"/>
    <to uri="file://filepath/temp?fileName=${file:name.noext}-${date:now:yyyyMMddHHmmssSSS}${file:ext}"/>
</route>
  • 效果:比如原文件是data.zip,下载后会变成data-20240520143025123.zip,每次文件名都唯一,不会覆盖旧文件。

方案3:用幂等仓库记录已下载文件(适合不能修改服务器文件的场景)

如果无法修改FTP服务器上的文件结构,可通过本地幂等仓库记录已下载的文件名,跳过重复文件。

先定义幂等仓库Bean:

<bean id="ftpIdempotentRepo" class="org.apache.camel.processor.idempotent.FileIdempotentRepository">
    <property name="fileStore" value="本地路径/ftp-idempotent-repo"/>
</bean>

再修改路由:

<route id="ftp">
    <from uri="ftp://xxx@myftp.com/ftp-test/?password=mypassword&idempotent=true&idempotentRepository=#ftpIdempotentRepo"/>
    <to uri="file://filepath/temp"/>
</route>
  • 效果:路由会自动记录已下载的文件名,下次执行时跳过已处理过的文件,不会重复下载覆盖。

关于.done扩展名的正确用法

你之前尝试的.done如果是想标记文件已处理,需要注意:

  • FTP组件的doneFileName参数是等待服务器上出现对应.done文件才开始下载源文件(比如要下载data.zip,需要服务器上先有data.zip.done),不是用来标记本地文件。
  • 如果要在本地生成.done标记文件,可通过onCompletion实现,但这不能解决重复下载覆盖的问题,只是做标记用:
<route id="ftp">
    <from uri="ftp://xxx@myftp.com/ftp-test/?password=mypassword"/>
    <to uri="file://filepath/temp"/>
    <onCompletion>
        <setHeader headerName="CamelFileName">
            <simple>${file:name}.done</simple>
        </setHeader>
        <to uri="file://filepath/temp"/>
    </onCompletion>
</route>

内容的提问来源于stack exchange,提问作者b4718

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:42:57