kettle实现基于数据库记录的文件附件上传

背景说明: 某b/s系统,支持用户上传图片文件等附件文件,上传后的文件存到了某一个web服务器的特定路径下,然后数据库的表里面记录了web访问的url路径和文件在本地物理磁盘存储的路径,这里不考虑文件服务器、对象存储等来讲对于小项目来讲是够用的。数据库表的结构示例为

file_idfile_urlfile_path
1http://x.x.x.x/static/xxx.jpgd:/xxx/xxx/xxx.jpg
2http://x.x.x.x/static/xxx1.jpgd:/xxx/xxx/xxx1.jpg

 

现在的需求是,通过kettle,实现定时将用户上传的附件文件上传到某个ftp里面去,下面是实现过程:

1.流程

    大概流程就是读取数据库表里面的记录内容,然后逐条找到文件去上传(废话)。这里面有一个小点需要注意,那就是读取数据库表的记录后,数据是多于1条记录的,但是文件上传操作一次只支持上传一个文件,所以要把数据库表的数据依次赋值给变量,通过变量传递实现循环单个文件上传。

2.总体任务

忽略上面的那些内容,看下面的上传附件文件这个,它的内容是

对应的ktr内容是

其中的表输入执行的sql是select file_path from 附件表 ,复制记录到结果 这一步没有什么好配置的,保持默认即可。

 

然后“循环处理文件”这个作业项的内容是这样的:

务必将里面的“执行每一个输入行”选中。

然后循环读取附件文件任务.ktr的内容是这样的:

其中的“从结果获取记录”的内容是:

这里面的FILE_PATH就是从数据库里面查询出来的字段名称,然后Transformation executor的内容是:

注意这里面涉及到Parameters变量FILE_PATH的传递,看上图的配置

然后“上传一个文件.ktr”的内容是:

在我这个项目里面,附件需要上传到一个特定的sftp目录里面去,这个特定的sftp path是通过自定义常量数据提供的,如下图:

具体TARGET_PATH的值是多少就不展示了,根据自己的需要配置或者不配置都行。

然后获取变量的操作是这样的:

下一步真正是通过sftp去上传kettle file的操作是这样的:

source filename field指定为FILE_PATH变量,Remote director指定为TARGET_PATH,勾选Create folder,在General里面配置sftp的ip用户名和密码信息,这样整个读取数据库表里面记录内容,实现对应附件文件上传的kettle脚本就可以正常工作了。

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

peihexian

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值