NiFi重命名移动文件求助:需将文件改为filename.done格式
解决方案:NiFi实现SFTP文件移动并重命名
针对你的需求,我推荐两种不同场景的方案,你可以根据源目录和loaded目录的位置来选择:
场景1:源目录与loaded目录在同一SFTP服务器
这种情况最推荐用MoveSFTP处理器,无需将文件下载到NiFi本地,直接在SFTP服务器内完成移动+重命名,效率最高:
- 配置SFTP连接参数:和你之前用
FetchSFTP的配置一致(主机地址、端口、用户名/密钥、根目录等) - 设置
Remote Source Directory为你的源文件所在目录 - 设置
Remote Destination Directory为loaded目录的路径 - 关键配置:在
Rename Destination File中填写属性表达式,实现重命名:- 如果要给原文件名直接追加
.done(比如data.csv→data.csv.done):用${filename}.done - 如果要替换原文件后缀为
.done(比如data.csv→data.done):用${filename:substringBeforeLast('.')}.done
- 如果要给原文件名直接追加
- 该处理器执行后,源文件会直接从源目录移动到
loaded目录并完成重命名,源目录不会留下原文件。
场景2:源目录在SFTP服务器,loaded目录是本地磁盘
如果loaded是本地目录,需要先拉取文件到NiFi,再修改文件名后输出:
- FetchSFTP:正常配置SFTP连接拉取文件,记得开启
Delete Source File为true,这样拉取后源文件会被删除,相当于“移动”的效果 - UpdateAttribute:添加或修改
filename属性,用表达式实现重命名:- 示例属性配置:
- 属性名:
filename - 属性值:
${filename}.done(或根据需求用${filename:substringBeforeLast('.')}.done)
- 属性名:
- 示例属性配置:
- PutFile:设置
Directory为本地的loaded目录,PutFile会自动使用FlowFile的filename属性作为输出文件名,完成最终的移动+重命名。
如果你的loaded目录是另一个远程SFTP服务器,只需要把上述步骤中的PutFile换成PutSFTP,配置目标SFTP的连接参数即可,同样会使用修改后的filename属性作为远程文件名。
内容的提问来源于stack exchange,提问作者User6006
相关产品推荐
相关产品推荐

