springBoot下的ftp下载

  • springboot-Environment

  • ftp登录、退出

  • 打包下载


本实例将创建一个ftp打包文件的工具类

Environment类获取配置信息

springboot的Environment类,可以获取到所有的配置资源。如果我们用到ftp,就会有一些登录ftp的相关ip、port、username、password,按照程序员的尿性,肯定不能直接写在类里。

    private FTPClient ftpClient;  private String strIp;  //ftp ipprivate int intPort;   //ftp portprivate String user;   //ftp usernameprivate String password; //ftp passwordprivate Environment environment; public FtpUtils(Environment environment){this.environment = environment;this.strIp = environment.getProperty("配置文件里咋写的你咋写");String strPort = environment.getProperty("配置文件里咋写的你咋写");if(!strPort.trim().equals("")){this.intPort = Integer.valueOf(strPort);}this.user = environment.getProperty("配置文件里咋写的你咋写");this.password = environment.getProperty("配置文件里咋写的你咋写");this.ftpClient = new FTPClient();   }

FTPClient是啥玩意?
如果你没有commons-net包,肯定是不行的,这包咋来的就先不说了。
具体咋登陆的ftp服务器,其实FTPClient都写好了,人家就是干这个事的。我们只需要跟它提供登陆需要的信息,就比如我们用filezilla登陆时要填的信息

ftp登录、退出登录

登陆

 /*** 登录ftp服务器* @return*/public boolean ftpLogin(){boolean isOk = false;// 这个编码的设定因情况而定,这里只告诉大家,能设置编码ftpClient.setControlEncoding("GBK");try {// 有没有端口都要登上去的意思if(intPort>0){ftpClient.connect(this.strIp, this.intPort);}else{ftpClient.connect(this.strIp);}isOk = this.ftpClient.login(this.user, this.password);this.ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);this.ftpClient.setBufferSize(1024 * 2);  this.ftpClient.setDataTimeout(30 * 1000);} catch (IOException e) {e.printStackTrace();}return isOk;}

退出登录

 /*** 退出ftp服务器*/public void ftpLogout(){if (null != this.ftpClient && this.ftpClient.isConnected()) {  try {  this.ftpClient.logout();// 退出FTP服务器  } catch (IOException e) {  e.printStackTrace();  } finally {  try {  this.ftpClient.disconnect();// 关闭FTP服务器的连接  } catch (IOException e) {  e.printStackTrace();  }  }  }}

哎,下载个文件还登录这个,退出个那个的,但是没办法,这又不是本地下载。用完就干掉它。

文件下载

 public void downloadFile(String remoteFileName ,ZipOutputStream zipOutputStream){try {zipOutputStream.putNextEntry(new ZipEntry(remoteFileName));this.ftpClient.enterLocalPassiveMode();boolean isRetrieOk = this.ftpClient.retrieveFile(remoteFileName, zipOutputStream);if(!isRetrieOk){return;}zipOutputStream.closeEntry();} catch (IOException e) {e.printStackTrace();}}

remoteFileName 文件绝对路径+文件名
zipOutputStream 打包就是用它,具体从哪来的?下面是我调用的示例

@RequestMapping("/downloadFile")
public void downloadFile(HttpServletResponse res){// 刚才的一系列代码都是FtpUtils中的FtpUtils ftpUtils = new FtpUtils(environment);boolean login =  ftpUtils.ftpLogin(); // 登录res.setContentType("application/pdf");// 这里重新编码以免中文名称的压缩包出不来String downloadFileName = new String("你自己命名的压缩包.zip").getBytes("GBK"), "ISO-8859-1");res.setHeader("content-Disposition", "attachment;filename="+downloadFileName);ZipOutputStream zipOutputStream = null;try {zipOutputStream = new ZipOutputStream(res.getOutputStream());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}// 这里只下载了一个文件,你也可以通过循环或其他形式,多次调用,只要在压缩流关闭之前都会压缩到一个包内,而且保留文件路径ftpUtils.downloadFile("你的文件",zipOutputStream);try {zipOutputStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}ftpUtils.ftpLogout();// 退出
}

以上某些部分为手打,可能有不严谨的地方,请谅解

springBoot下的ftp下载相关推荐

  1. linux命令行下的ftp 多文件下载和目录下载

    目标ftp服务器是一个非标准端口的ftp 1.通过shell登录#ftp    //shell下输入ftp命令,进入到ftp提示符>open IP  PORT   //IP ,PORT对应为服务 ...

  2. linux ftp去不了文件损坏,Linux下使用ftp上传压缩文件,windows下载打开损坏问题

    由于业务部门提出新的需求,需要在业务系统上进行修改,于是准备把生产环境上的系统下载到本地进行相应的修改(系统是第三方做的),服务器用的是CentOS6.3,由于安全问题,服务器的登录需要经过堡垒机,不 ...

  3. SpringBoot中通过接口下载resources下的文件

    SpringBoot中通过接口下载resources下的文件 解决的问题 当项目打成jar包进行部署时,一些示例文件放在resources目录下,提供接口供用户访问下载 文件存放位置 接口实现 @Re ...

  4. Linux下使用ftp上传压缩文件,windows下载打开损坏问题

    由于业务部门提出新的需求,需要在业务系统上进行修改,于是准备把生产环境上的系统下载到本地进行相应的修改(系统是第三方做的),服务器用的是CentOS6.3,由于安全问题,服务器的登录需要经过堡垒机,不 ...

  5. ubuntu下搭建FTP服务器并使用FileZilla上传下载

    ubuntu下搭建FTP服务器并使用FileZilla上传下载 为了让实验室同学在共享文件时更加方便,我们决定在实验室电脑上搭建一个FTP服务器,ubuntu系统版本为16.04,下面就是我的搭建流程 ...

  6. 基于javaweb的在线网盘系统(java+jsp+springboot+mysql+thymeleaf+ftp)

    基于javaweb的在线网盘系统(java+jsp+springboot+mysql+thymeleaf+ftp) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/my ...

  7. ubuntu下安装ftp服务器

    ubuntu下安装ftp服务器 Ftp服务器是使用以vsftp为例. 1. 安装     $sudo aptitude install vsftpd     $ps aux | grep 'ftp' ...

  8. java ftp下载文件源码_java实现ftp文件下载的源代码

    这几天做的一个项目中用到了ftp文件传输,用java实现了ftp文件的下载. 一.win7下搭建ftp服务器 详见:http://jingyan.baidu.com/article/4b52d7026 ...

  9. 在Windows2003下搭建FTP服务器

      在Windows2003下搭建FTP服务器 Windows 2003 Standard Edition.Windows 2003 Enterprise Edition.Windows XP Pro ...

最新文章

  1. 我与技术------2012程序之路
  2. php字符串常用算法--字符串加密解密
  3. ElementUI在el-table基础上进行导出.xls表格操作
  4. SpringMVC +Hibernate 学习实例
  5. Openfiler + Redhat 5.4 Oracle 11gR2 RAC 安装文档
  6. 【华为出品】物联网全栈开发实战营第2期来啦!送海思开发板
  7. hive的一些调优参数
  8. one-many和many-one的关系中的inverse的详解
  9. JAVA中文件指针复位到文件开头
  10. json转对象的时候字段为空值的时候会被过滤
  11. class文件与dex文件解析
  12. GIT的安装与gitee基础使用
  13. [蓝桥杯]打水问题、夺宝奇兵、调手表(c++详解)
  14. ArcGIS的运行许可文件ecp如何打开?
  15. np.vstack()函数
  16. 4c钻石净度魔术语言,钻戒4c什么意思?详解钻石4C的秘密
  17. 注册制为国产奶粉正名,但迎来“春天”仍任重道远
  18. Android开发必备那些工具
  19. VA番茄助手支持vs2010-vs2017
  20. 白萝卜de学习笔记2

热门文章

  1. 人脸识别技术原理与工程实践(10个月人脸识别领域实战总结)
  2. 单缝衍射matlab,基于matlab的单缝衍射.doc
  3. mac 转换root角色
  4. 深入分析 I/O 的工作机制
  5. 关于获取网站嵌入视频源地址方法
  6. java线程间通讯的几种方式
  7. 【Python基础】字符串 正则表达式
  8. Java分页代码的实现
  9. 参数配置类毕业论文文献都有哪些?
  10. 面试官:请你从架构演进的角度讲讲redis、kafka和 pulsar消息队列