1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 解决ftp上传文件速度比较慢的问题!

解决ftp上传文件速度比较慢的问题!

时间:2018-11-12 19:58:29

相关推荐

解决ftp上传文件速度比较慢的问题!

问题描述:

最近在项目中遇到一个问题,每次ftp上传图片的的速度都超级慢,测试的妹子都要爆炸了,她说我就上传一个几十k的图片都点击一下要等半天,于是便给我提了一个bug要我去解决的这问题,然后我一边开始debug代码,一边去网上找解决方案!

找出原因:

ftp上传文件速度慢主要有两方面的原因:

1.网络问题,网速限制,并且没使用缓冲流来操作,导致上传的速度比较慢!

2.登录ftp与ftp建立连接比较慢

最终得到如下三种解决方案:

方案一:针对网速差,读取文件的速度慢,可以使用缓冲区来提高效率!

项目源码如下:

public static boolean upload(String ftpUrl, File file,String areaDeviceImgPath,String newFileName)throws Exception{FtpConfInfo infoConf = getInfo(ftpUrl);if(infoConf == null){return false;}FTPClient ftpclient = connectServer(infoConf);if(ftpclient == null){log.error("构建FTP客户端失败");}if(infoConf.getLocation()!=null){String[] ss = infoConf.getLocation().split(Constants.SEPARATOR);for(String s :ss){if(!existDirectory(ftpclient,s)){ftpclient.mkd(s);}ftpclient.changeWorkingDirectory(s);}}FtpUtil.fileMkDir(ftpclient,areaDeviceImgPath);InputStream is = null;boolean bool = false;try {ftpclient.enterLocalPassiveMode();is =new FileInputStream(new File(file.getAbsolutePath()));bool = ftpclient.storeFile(newFileName,is);ftpclient.changeToParentDirectory();ftpclient.logout();closeServer(ftpclient);if(bool){log.info("文件传输到FTP成功");}else {log.info("文件传输到FTP失败");}} catch (Exception e) {log.error(e);}finally{is.close();}return bool;}

改进后的代码如下:

public static boolean upload(String ftpUrl, MultipartFile file,String areaDeviceImgPath,String newFileName)throws Exception{FtpConfInfo infoConf = getInfo(ftpUrl);if(infoConf == null){return false;}FTPClient ftpclient = connectServer(infoConf);if(ftpclient == null){log.error("构建FTP客户端失败");}if(infoConf.getLocation()!=null){String[] ss = infoConf.getLocation().split(Constants.SEPARATOR);for(String s :ss){if(!existDirectory(ftpclient,s)){ftpclient.mkd(s);}ftpclient.changeWorkingDirectory(s);}}FtpUtil.fileMkDir(ftpclient,areaDeviceImgPath);//InputStream is = null;BufferedInputStream input= null;boolean bool = false;try {ftpclient.enterLocalPassiveMode();//is = file.getInputStream();ftpclient.setBufferSize(1024*1024);byte [] fileBytes=file.getBytes();input= new BufferedInputStream( new ByteArrayInputStream(fileBytes));bool = ftpclient.storeFile(newFileName,input);ftpclient.changeToParentDirectory();ftpclient.logout();closeServer(ftpclient);if(bool){log.info("文件传输到FTP成功");}else {log.info("文件传输到FTP失败");}} catch (Exception e) {log.error("文件上传失败:" + e);return false;}finally{input.close();}return bool;}

问题:关于java的io读写,缓冲区是如何提高读写效率的?

/zealot_2002/article/details/8231194

该博客讲述很明白

方案二:针对建立连接慢的解决方案

如下解决

vi /etc/vsftpd/vsftpd.conf

在vsftpd.conf文件中加入:reverse_lookup_enable=NO

保存后重新启动vsftpd: service vsftpd restart

点击查看ftp的配置

方案三:同样是针对建立连接慢的解决方案

分析问题:既然他建立连接慢,也就是说他建立连接不容易,既然不容易我就让他建立连接以后一直保持连接。但是此种方式对资源的耗费很高,不建议这么做。

具体实现思路如下(单例模式+定时器+锁):

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。