1.出现上传文件速度很慢,而且文件大小始终为0.使用FileZilla正常上传,文件无损坏
- 添加代码:调用FTPClient的enterLocalPassiveMode();方法,设置为被动模式,既可以解决。
- 不使用代码的临时开启的话,可以直接更改vsftpd:
方法如下
Linux的vsftpd的被动模式默认是开启的,但是要指定一个端口范围,打开vsftpd.conf文件,在后面加上
pasv_min_port=30000
pasv_max_port=30999
表示端口范围为30000~30999,这个可以随意改。改完重启一下vsftpd
由于指定这段端口范围,iptables也要相应的开启这个范围,所以像上面那样打开iptables文件。
也是在21上下面另起一行,更那行差不多,只是把21 改为30000:30999,然后:wq保存,重启下iptables。这样就搞定了。
2.出现文件损坏:有大小
FTP默认传的是文本,而图片是二进制
设置编码:setFileType(FTP.BINARY_FILE_TYPE),即可解决
下面是我的代码:
@Test
public void testFtpClient() throws Exception, IOException{
//创建要提个FTPClient对像
FTPClient client = new FTPClient();
//创建FTP链接
client.connect("192.168.159.129", 21);
//登录FTP服务器:用户名密码
client.login("ftpuser", "123456");
//上传:服务端文件名,上传文件的InputStream
//读取文件
client.enterLocalPassiveMode();
FileInputStream in = new FileInputStream(new File("E:\\test\\timg.jpg"));
//设置上传路径,远程站点路径
boolean falg = client.changeWorkingDirectory("/www/images");
//修改上传文件的格式,ftp默认传的文本,而图片是二进制
client.setFileType(FTP.BINARY_FILE_TYPE);
client.storeFile("hello.jpg", in);
//关闭链接
client.logout();
}
即可完成通过FTP将E:/test/timg.jpg上传到linux的/home/ftp/www/images下