环境
- vsftpd
- nginx(用于反向代理,解决不同协议之间的文件传输)
- linux(centOS6.5)
- java语言
问题描述
今天使用SSM项目,利用springMVC的multipart解析器往服务器上传图片,视图使用的是kindeditor插件,一开始上传文件失败,以为是kindeditor插件的问题,后来使用原生表单代码上传,还是失败。
解决办法
查阅资料发现上传文件有两种模式
- Port模式:是客户端C在本地打开一个端口等服务端S去连接建立数据连接;
- Pasv模式:服务端S打开一个端口等待客户端C去建立一个数据连接。
默认情况下,FTPCLIENT用的是port模式,可以在FTPCLIENT原码中看到
模式是客户端发起的,在ftputils工具类代码上加入
ftpClient.enterLocalPassiveMode();
这个方法的意思就是每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据。这样做是因为ftp server可能每次开启不同的端口来传输数据,但是在linux上或者其他服务器上面,由于安全限制,可能某些端口没有开启,所以就出现阻塞。