问题描述:

最近在项目中遇到一个问题,每次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. 三菱PWM格式文件梯形图编码格式
  2. hdu5126stars
  3. 如何高效安全的将资源同步到本地数据库
  4. php调用C代码的方法详解和zend_parse_parameters函数详解
  5. Java多线程(六)之Deque与LinkedBlockingDeque深入分析
  6. JDK5.0新特性--可变参数
  7. 微信小程序中app.js文件、组件、api
  8. 循环比赛日程表(信息学奥赛一本通-T1325)
  9. 无意中最大的收获:《构建高性能Web站点》
  10. 自定义头文件之二------hlib.h(慢慢更新)
  11. 几行代码就能实现为何要多此一举
  12. 雷云3计算机不满足系统要求,电工进网作业许可考试(高压类)4、5、6章题库(无答案)...
  13. Gravity:环形二维码扫描识别传感器详细介绍和工作原理
  14. 企业级项目实战讲解!我凭借这份PDF的复习思路,薪资翻倍
  15. 实不相瞒,我做海外TikTok搬运视频一年的收入,可能是你10年的工资
  16. 步进电机基础(2.1)- 定子相数的分类、结构、原理
  17. 广义表的长度,深度及复制广义表的算法
  18. Linux-Udev机制
  19. 【GPGPU编程】GPGPU架构剖析之谓词寄存器
  20. 解决PHP报错:Call to undefined function array_column()

热门文章

  1. 包过滤、状态化、七层防火墙
  2. 从吉日嘎拉那里学到的……
  3. 【Rust技术公开课】港哥Elton自主开发的协程库解析-CSDN公开课-专题视频课程
  4. SOHOy一族怎么样网上赚钱
  5. 步进电机不转,步进电机驱动器的线已接好,但它就是不转,MF- MF+ (无)PU- PU+ DR- dr+的线已经接好
  6. Python通过RS232通讯控制步进电机
  7. 怎样查找mysql驱动。
  8. 福师计算机辅助设计1PS在线作业二,《计算机辅助设计1(ps)》在线作业一试卷(最新).doc...
  9. python爬虫selenium账号和密码_selenium + python 登录页面,输入账号、密码,元素定位问题...
  10. 在军校学计算机出来能干什么,对军校非计算机专业计算机基础课程设置的一些思考.pdf...