问题描述:

最近在项目中遇到一个问题,每次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读写,缓冲区是如何提高读写效率的?

https://blog.csdn.net/zealot_2002/article/details/8231194

该博客讲述很明白

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

如下解决

vi /etc/vsftpd/vsftpd.conf

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

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

点击查看ftp的配置

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

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

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

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

  1. 解决FTP上传文件速度慢的问题

    我们在利用ftp的storeFile()上传存储文件的时候,为了让上传速度提升,建议采用添加缓冲区的方式,根据上传文件的大       小,设置缓冲区大小,上传的过程中,缓冲区写满后才会进行磁盘的读写 ...

  2. FTP上传文件速度太慢怎么办?

    用户在建设网站时必不可少的一类工具就是文件传输工具.通过客户端和主机之间的文件交互,及时上传补丁文件.下载日志文件等,确保网站的正常稳定运行.但是也有不少用户反映使用FTP上传文件速度太慢,这是什么原 ...

  3. 解决xshell上传文件速度为0的方法

    连接服务器cd切换到主目录执行以下命令 如果在xshell下上传文件速度一直为0,可以尝试安装 yum -y install lrzsz 亲测,实用!

  4. ftp服务器上传文件频率,ftp服务器上传文件速度多少

    ftp服务器上传文件速度多少 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 使 ...

  5. xshell 上传文件 速度为0的解决方法

    如果在xshell下上传文件速度一直为0,可以尝试安装 yum -y install lrzsz 亲测,实用!

  6. java ftp上传文件相关代码梳理

    java实现ftp文件上传 1.ftp文件上传步骤 1)连接ftp 2)检查工作目录是否存在 3)检查是否上传成功 4)完成任务后,断开ftp 2.具体如下,直接贴上核心代码: A)导入核心pom依赖 ...

  7. php实现ftp上传,PHP_PHP实现ftp上传文件示例,FTP上传是PHP实现的一个常见且 - phpStudy...

    PHP实现ftp上传文件示例 FTP上传是PHP实现的一个常见且非常重要的应用技巧,今天就来与大家分享一下PHP实现FTP上传文件的简单示例.希望对大家的PHP学习能带来一定的帮助. 主要代码如下: ...

  8. ftp上传文件 严重文件传输错误

    如果对您有帮助,请点赞告诉我,如果没有解决您的疑惑,请您留言,我陪您一起努力解决! ftp上传文件出现553 Could not creat files 严重文件传输错误 在linux下执行 chmo ...

  9. win10系统上传服务器很慢,win10系统上传文件速度太缓慢

    在日常的工作另一个还可以学习途中中,有时我们需要上传一些文件.很多朋友在使用win10电脑上传途中中发现速度非常缓慢,像果一次性上传很多文件,过缓慢的速度会消磨很多时间,从但是影响到用户的工作另一个还 ...

最新文章

  1. 核苷酸pi值计算方法
  2. 【剑指offer-Java版】33把数组排成最小的数
  3. java中的排序算法——简单选择排序,树形选择排序与堆排序(一)
  4. 2013\National _C_C++_A\2.骰子迷题
  5. python自动登录教程_Python 实现自动登录+点击+滑动验证功能
  6. C语言九十六之实现经典的字符串反转(通过指针或下标操作)
  7. 从React 编程到好莱坞
  8. oracle 手动链库,Oracle 数据库干数据库链(Database links)的两个例子
  9. 信号与系统公式笔记(9)——Z变换
  10. pop3协议auth指令总结
  11. IO中write函数
  12. 【mysql】---php链接数据库---【巷子】
  13. DC初级摄友必学摄影技巧(转贴)
  14. 利用VBScript连接mysql数据库_过路老熊_新浪博客
  15. Mysql数据库计算时间差(天,时,分,秒)
  16. C语言没学好,C++听不懂,怎么办?
  17. 基于win10的hyper-v安装openwrt与zerotier实现内网穿透及异地组网
  18. 抽象类、接口、Objext 详解
  19. 【沃顿商学院学习笔记】管理学——03腐败对信任的影响Corruption and Trust
  20. python语言单词接龙_Python单词接龙小程序

热门文章

  1. 五菱4s店维修记录怎么查?
  2. 每日学术速递5.12
  3. tensorflow创建动态库文件来自定义op
  4. Device eth0 has different MAC address than expected, ignoring
  5. 欧几里德空间_百度百科
  6. 【人脸】低分辨率图像识别的一些方法路线
  7. 18.3 万美元offer到手!ChatGPT 通过谷歌 L3 面试:留给谷歌的时间不多了
  8. M - Safest Buildings ZOJ -概率+计算几何
  9. openCV手势识别之隔空移物
  10. shell脚本之算术运算符