Linux :FTP上传文件,文件大小为0,上传速度慢,文件损坏

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下

你可能感兴趣的:(杂七杂八,Java)