linux服务器上搭建ftp服务器无法上传文件

时间:2024-05-18 13:54:14

最近在项目中遇到了一个问题,困扰了我好几天,客户有个需求需要在页面把xml文件上传,然后后台解析文件并入库。由于dubbo框架的dubbo协议有文件大小的限制,不能传输超过8M的文件,所以和组员讨论后决定使用ftp服务器的方案。

实现方案:页面上传文件直接上传到ftp服务器,然后后台执行到解析文件的步骤时直接去ftp服务器的指定路径上下载客户上传的xml文件。

很简单的业务逻辑,在本地(自己的电脑,win10系统)开发、测试都没有任何问题,但是当把应用部署到云服务器(linux系统)的测试环境上时,发现文件一直无法上传,但是文件上传存放的路径却可以生成,导致无法获取文件解析入库。

然后开始排查问题,开始的时候怀疑是ftp服务器搭建过程中缺少了哪些配置,后面否定了,因为在本地测试的时候也是用同一个ftp服务器,最后排查到ftp上传的Java工具类上,发现上传的时候没有抛任何异常storeFile()接口一直返回false;
如下图所示:
linux服务器上搭建ftp服务器无法上传文件
后台日志如下:
linux服务器上搭建ftp服务器无法上传文件
解决方案如下图所示:
linux服务器上搭建ftp服务器无法上传文件
上面那两行的第一行的作用如下:
在项目中使用 commons-net-3.0.1jar实现FTP文件的下载,在 windows xp或win10上运行正常,但是放到linux上,却无法正常使用上传文件接口和获取文件列表接口。所以需要在调用storeFile、IistFiles这两个方法之前,调用FTPClient.enterlocalPassiveMode()这个方法的意思就是每次数据连接之前, ftp clien诉 ftp server开通一个端口来传输数据。为什么要这样做呢,因为ftp server可能毎次开启不同的端口来传输数据,但是在linux上,由于安全限制,可能某些端口没有开启,所以就出现阻塞。OK,问题解决。