解决使用FTPclient上传文件0字节的问题

环境
  • vsftpd
  • nginx(用于反向代理,解决不同协议之间的文件传输)
  • linux(centOS6.5)
  • java语言
问题描述

今天使用SSM项目,利用springMVC的multipart解析器往服务器上传图片,视图使用的是kindeditor插件,一开始上传文件失败,以为是kindeditor插件的问题,后来使用原生表单代码上传,还是失败。解决使用FTPclient上传文件0字节的问题_第1张图片

解决办法

查阅资料发现上传文件有两种模式

  1. Port模式:是客户端C在本地打开一个端口等服务端S去连接建立数据连接;
  2. Pasv模式:服务端S打开一个端口等待客户端C去建立一个数据连接。

默认情况下,FTPCLIENT用的是port模式,可以在FTPCLIENT原码中看到
模式是客户端发起的,在ftputils工具类代码上加入

ftpClient.enterLocalPassiveMode()

这个方法的意思就是每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据。这样做是因为ftp server可能每次开启不同的端口来传输数据,但是在linux上或者其他服务器上面,由于安全限制,可能某些端口没有开启,所以就出现阻塞。

解决使用FTPclient上传文件0字节的问题_第2张图片

解决使用FTPclient上传文件0字节的问题_第3张图片

你可能感兴趣的:(java)