1. @GetMapping(value = "/find")
  2. public String findfile(String filePath, String fileNames, HttpServletResponse response) {
  3. initFtpClient();
  4. FtpUtils f = new FtpUtils();
  5.  
  6. boolean b = false;
  7. try {
  8. b = f.downloadFile(filePath, fileNames, response, ftpClient);
  9. } catch (IOException e) {
  10. e.printStackTrace();
  11. }
  12. if (b){
  13. return "下载成功";
  14. }else{
  15. return "下载失败";
  16. }
  17.  
  18. }
  1. public boolean downloadFile(String pathname, String filenames, HttpServletResponse response, FTPClient ftpClient) throws IOException {
  2. boolean flag = false;
  3.  
  4. //获取文件名数组
  5. String[] splitFiles = filenames.split(",");
  6.  
  7. // 获取输出流
  8. BufferedOutputStream out = null;
  9. try {
  10. out = new BufferedOutputStream(response.getOutputStream());
  11. } catch (IOException e) {
  12. e.printStackTrace();
  13. }
  14.  
  15. try {
  16. System.out.println("开始下载文件");
  17. // initFtpClient();
  18. //切换FTP目录
  19. ftpClient.enterLocalPassiveMode();
  20. ftpClient.changeWorkingDirectory(pathname);
  21. FTPFile[] ftpFiles = ftpClient.listFiles();
  22.  
  23. response.reset();
  24. response.setHeader("content-type", "application/octet-stream");
  25. response.setContentType("application/octet-stream;charset=utf-8");
  26. //设置输出压缩包名字
  27. response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("downloadFile.zip", "UTF-8"));
  28.  
  29. //建立ZipOutputStream类:完成文件或文件夹的压缩
  30. ZipOutputStream zipOut = new ZipOutputStream(out);
  31.  
  32. //循环要下载的文件名
  33. for (String filename : splitFiles) {
  34. //循环ftp服务器文件列表,判断文件是否存在
  35. for (FTPFile file : ftpFiles) {
  36. if (filename.equalsIgnoreCase(file.getName())) {
  37.  
  38. //获取ftp文件输入流
  39. ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
  40. InputStream inputStream = ftpClient.retrieveFileStream(file.getName());
  41. byte[] bytes = IOUtils.toByteArray(inputStream);
  42. InputStream in = new ByteArrayInputStream(bytes);
  43.  
  44. //创建压缩包中每个文件的文件名
  45. zipOut.putNextEntry(new ZipEntry(filename));
  46.  
  47. byte[] buffer = new byte[1024 * 10];
  48. int len;
  49. try {
  50. while ((len = in.read(buffer)) != -1) {
  51. zipOut.write(buffer, 0, len);
  52. }
  53. zipOut.closeEntry();
  54. //下面两行必须有,否则会导致inputStream空指针
  55. inputStream.close();
  56. ftpClient.completePendingCommand();
  57. } catch (IOException e) {
  58. e.printStackTrace();
  59. }
  60.  
  61. flag = true;
  62. }
  63. }
  64. }
  65. zipOut.close();
  66. out.close();
  67.  
  68. ftpClient.logout();
  69.  
  70. System.out.println("下载文件成功");
  71. } catch (Exception e) {
  72. // response.setContentType("text/plain;charset=utf-8");
  73. // Integer error_code = 0;
  74. // String real_msg = "下载错误";
  75. // response.sendError(error_code, real_msg);
  76. // response.setStatus(000);
  77. System.out.println("下载文件失败");
  78. e.printStackTrace();
  79. } finally {
  80. if (ftpClient.isConnected()) {
  81. try {
  82. ftpClient.disconnect();
  83. } catch (IOException e) {
  84. e.printStackTrace();
  85. }
  86. }
  87. if (null != out) {
  88. try {
  89. out.close();
  90. } catch (IOException e) {
  91. e.printStackTrace();
  92. }
  93. }
  94. }
  95. return flag;
  96. }

ftp多文件压缩下载的更多相关文章

  1. php多文件压缩下载

    /*php多文件压缩并且下载*/ function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. whil ...

  2. Java 多个文件压缩下载

    有时候会有多个附件一起下载的需求,这个时候最好就是打包下载了 首先下面这段代码是正常的单个下载 public void Download(@RequestParam("file_path&q ...

  3. asp.net mvc 文件压缩下载

    压缩文件相关的类: public class ZIPCompressUtil { public static Tuple<bool, Stream> Zip(string strZipTo ...

  4. java多个文件压缩下载

    public static void zipFiles(File[] srcfile,ServletOutputStream sos){ byte[] buf=new byte[1024]; try ...

  5. 用Spring中的ResponseEntity文件批量压缩下载

    我看了很多网上的demo,先生成ZIP压缩文件,然后再下载. 我这里是生成ZIP文件流 进行下载.(核心代码没多少,就是一些业务代码) @RequestMapping(value = "/& ...

  6. Linux 学习笔记 5 文件的下载、压缩、解压、初步认识yum

    写在前面 上节我们通过简单的几组命令,已经完全的实现了文件的移动.删除.更名.以及复制,我们最常用的基本玩法,本节将带着大家学习压缩.解压的相关步骤. Linux 学习笔记 4 创建.复制.移动.文件 ...

  7. 使用批处理文件在FTP服务器 上传下载文件

    1.从ftp服务器根目录文件夹下的文件到指定的文件夹下 格式:ftp -s:[配置文件] [ftp地址] 如:ftp -s:c:\vc\ftpconfig.txt   192.168.1.1 建立一个 ...

  8. 文件打包,下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件

    总结:                                                          使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文: ...

  9. Linux shell:FTP(文件传输协议)上传下载命令

    SecureCRT通过ftp将nmon上传,建立一个目录,用命令上传文件.[命令见下面] 或通过UE.SSH上传/下载,使用sftp建立链接. [通过cmd进入ftp服务器]先假设有一FTP服务器,F ...

随机推荐

  1. 摩拜单车微信小程序开发技术总结

    前言 摩拜单车小程序已于微信小程序上线第一天正式发布,刷爆微博媒体朋友圈.本文主要讲讲技术方向的总结,在段时间的开发周期内内如何一步步从学习到进阶. 思维转变 微信小程序没有HTML的常用标签,而是类 ...

  2. 关于个人开源项目(vue app)的一些总结

    关于个人开源项目(vue app)的一些总结 项目地址 https://github.com/BYChoo/record 项目简介 此项目名叫:Record.是以Vue全家桶(vue,vue-rout ...

  3. Android Studio 异常以及解决方案

    1. Error:(1, 0) Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVER ...

  4. java重载时自动转换咋回事?举例说明

    当一个重载的方法被调用时,Java在调用方法的参数和方法的自变量之间寻找匹配.    但是,这种匹配并不总是精确的.只有在找不到精确匹配时,Java的自动转换才会起作用. (如果定义了test(int ...

  5. 校验ip地址的格式

    /*输入:strIP:ip地址 返回:如果通过验证返回true,否则返回false: */ function isIP(strIP) { if (isNull(strIP)) return false ...

  6. 在vue中实现点击哪个哪个区域变化背景色和字体颜色,其他默认(uni-app框架中也可以使用)

    template: 1 <view class="wrap"> 2 <view class="total" :class="{ se ...

  7. 手撕spring核心源码,彻底搞懂spring流程

    引子 十几年前,刚工作不久的程序员还能过着很轻松的日子.记得那时候公司里有些开发和测试的女孩子,经常有问题解决不了的,不管什么领域的问题找到我,我都能帮她们解决.但是那时候我没有主动学习技术的意识,只 ...

  8. Spring相关的API-ApplicationContext

    1.ClassPathXmlApplicationContext 它是从类的根路径下加载配置文件推荐使用这种 public class UserController { public static v ...

  9. vue 点击事件唤醒QQ

    window.location.href = 'http://wpa.qq.com/msgrd?v=3&uin=QQ号' window.location.href = 'http://wpa. ...

  10. 基于Kubernetes构建企业Jenkins master/slave CI/CD平台

    搭建平台目的: k8s中搭建jenkins master/slave架构,解决单jenkins执行效率低,资源不足等问题(jenkins master 调度任务到 slave上,并发执行任务,提升任务 ...