ftp多文件压缩下载
- @GetMapping(value = "/find")
- public String findfile(String filePath, String fileNames, HttpServletResponse response) {
- initFtpClient();
- FtpUtils f = new FtpUtils();
- boolean b = false;
- try {
- b = f.downloadFile(filePath, fileNames, response, ftpClient);
- } catch (IOException e) {
- e.printStackTrace();
- }
- if (b){
- return "下载成功";
- }else{
- return "下载失败";
- }
- }
- public boolean downloadFile(String pathname, String filenames, HttpServletResponse response, FTPClient ftpClient) throws IOException {
- boolean flag = false;
- //获取文件名数组
- String[] splitFiles = filenames.split(",");
- // 获取输出流
- BufferedOutputStream out = null;
- try {
- out = new BufferedOutputStream(response.getOutputStream());
- } catch (IOException e) {
- e.printStackTrace();
- }
- try {
- System.out.println("开始下载文件");
- // initFtpClient();
- //切换FTP目录
- ftpClient.enterLocalPassiveMode();
- ftpClient.changeWorkingDirectory(pathname);
- FTPFile[] ftpFiles = ftpClient.listFiles();
- response.reset();
- response.setHeader("content-type", "application/octet-stream");
- response.setContentType("application/octet-stream;charset=utf-8");
- //设置输出压缩包名字
- response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("downloadFile.zip", "UTF-8"));
- //建立ZipOutputStream类:完成文件或文件夹的压缩
- ZipOutputStream zipOut = new ZipOutputStream(out);
- //循环要下载的文件名
- for (String filename : splitFiles) {
- //循环ftp服务器文件列表,判断文件是否存在
- for (FTPFile file : ftpFiles) {
- if (filename.equalsIgnoreCase(file.getName())) {
- //获取ftp文件输入流
- ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
- InputStream inputStream = ftpClient.retrieveFileStream(file.getName());
- byte[] bytes = IOUtils.toByteArray(inputStream);
- InputStream in = new ByteArrayInputStream(bytes);
- //创建压缩包中每个文件的文件名
- zipOut.putNextEntry(new ZipEntry(filename));
- byte[] buffer = new byte[1024 * 10];
- int len;
- try {
- while ((len = in.read(buffer)) != -1) {
- zipOut.write(buffer, 0, len);
- }
- zipOut.closeEntry();
- //下面两行必须有,否则会导致inputStream空指针
- inputStream.close();
- ftpClient.completePendingCommand();
- } catch (IOException e) {
- e.printStackTrace();
- }
- flag = true;
- }
- }
- }
- zipOut.close();
- out.close();
- ftpClient.logout();
- System.out.println("下载文件成功");
- } catch (Exception e) {
- // response.setContentType("text/plain;charset=utf-8");
- // Integer error_code = 0;
- // String real_msg = "下载错误";
- // response.sendError(error_code, real_msg);
- // response.setStatus(000);
- System.out.println("下载文件失败");
- e.printStackTrace();
- } finally {
- if (ftpClient.isConnected()) {
- try {
- ftpClient.disconnect();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (null != out) {
- try {
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return flag;
- }
ftp多文件压缩下载的更多相关文章
- php多文件压缩下载
/*php多文件压缩并且下载*/ function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. whil ...
- Java 多个文件压缩下载
有时候会有多个附件一起下载的需求,这个时候最好就是打包下载了 首先下面这段代码是正常的单个下载 public void Download(@RequestParam("file_path&q ...
- asp.net mvc 文件压缩下载
压缩文件相关的类: public class ZIPCompressUtil { public static Tuple<bool, Stream> Zip(string strZipTo ...
- java多个文件压缩下载
public static void zipFiles(File[] srcfile,ServletOutputStream sos){ byte[] buf=new byte[1024]; try ...
- 用Spring中的ResponseEntity文件批量压缩下载
我看了很多网上的demo,先生成ZIP压缩文件,然后再下载. 我这里是生成ZIP文件流 进行下载.(核心代码没多少,就是一些业务代码) @RequestMapping(value = "/& ...
- Linux 学习笔记 5 文件的下载、压缩、解压、初步认识yum
写在前面 上节我们通过简单的几组命令,已经完全的实现了文件的移动.删除.更名.以及复制,我们最常用的基本玩法,本节将带着大家学习压缩.解压的相关步骤. Linux 学习笔记 4 创建.复制.移动.文件 ...
- 使用批处理文件在FTP服务器 上传下载文件
1.从ftp服务器根目录文件夹下的文件到指定的文件夹下 格式:ftp -s:[配置文件] [ftp地址] 如:ftp -s:c:\vc\ftpconfig.txt 192.168.1.1 建立一个 ...
- 文件打包,下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
总结: 使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文: ...
- Linux shell:FTP(文件传输协议)上传下载命令
SecureCRT通过ftp将nmon上传,建立一个目录,用命令上传文件.[命令见下面] 或通过UE.SSH上传/下载,使用sftp建立链接. [通过cmd进入ftp服务器]先假设有一FTP服务器,F ...
随机推荐
- 摩拜单车微信小程序开发技术总结
前言 摩拜单车小程序已于微信小程序上线第一天正式发布,刷爆微博媒体朋友圈.本文主要讲讲技术方向的总结,在段时间的开发周期内内如何一步步从学习到进阶. 思维转变 微信小程序没有HTML的常用标签,而是类 ...
- 关于个人开源项目(vue app)的一些总结
关于个人开源项目(vue app)的一些总结 项目地址 https://github.com/BYChoo/record 项目简介 此项目名叫:Record.是以Vue全家桶(vue,vue-rout ...
- Android Studio 异常以及解决方案
1. Error:(1, 0) Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVER ...
- java重载时自动转换咋回事?举例说明
当一个重载的方法被调用时,Java在调用方法的参数和方法的自变量之间寻找匹配. 但是,这种匹配并不总是精确的.只有在找不到精确匹配时,Java的自动转换才会起作用. (如果定义了test(int ...
- 校验ip地址的格式
/*输入:strIP:ip地址 返回:如果通过验证返回true,否则返回false: */ function isIP(strIP) { if (isNull(strIP)) return false ...
- 在vue中实现点击哪个哪个区域变化背景色和字体颜色,其他默认(uni-app框架中也可以使用)
template: 1 <view class="wrap"> 2 <view class="total" :class="{ se ...
- 手撕spring核心源码,彻底搞懂spring流程
引子 十几年前,刚工作不久的程序员还能过着很轻松的日子.记得那时候公司里有些开发和测试的女孩子,经常有问题解决不了的,不管什么领域的问题找到我,我都能帮她们解决.但是那时候我没有主动学习技术的意识,只 ...
- Spring相关的API-ApplicationContext
1.ClassPathXmlApplicationContext 它是从类的根路径下加载配置文件推荐使用这种 public class UserController { public static v ...
- vue 点击事件唤醒QQ
window.location.href = 'http://wpa.qq.com/msgrd?v=3&uin=QQ号' window.location.href = 'http://wpa. ...
- 基于Kubernetes构建企业Jenkins master/slave CI/CD平台
搭建平台目的: k8s中搭建jenkins master/slave架构,解决单jenkins执行效率低,资源不足等问题(jenkins master 调度任务到 slave上,并发执行任务,提升任务 ...