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 ...
随机推荐
- mysql基本操作1
数据库的分类 --1.关系型数据库-----用"表"保存数据,相关数据存入一张表中 --2.非关系型数据库-----键值数据库-----对象数据库 ###主流关系型数据库-Or ...
- hibernate 联合主键 composite-id
如果表使用联合主键(一个表有两个以上的主键),你可以映射类的多个属性为标识符属性.如:<composite-id>元素接受<key-property> 属性映射(单表映射)和& ...
- 简单的axios请求返回数据解构赋值
本地 data.json 文件 { "name": "大熊", "age": 18, "fnc": [ 1, 2, 3 ...
- 微信小程序和公众号和H5之间相互跳转
参考链接:https://www.imooc.com/article/22900 一.小程序和公众号 答案是:可以相互关联. 在微信公众号里可以添加小程序. 可关联已有的小程序或快速创建小程序.已关联 ...
- lunix或者centos服务器下如何下载自己在github上面的项目代码
1.在github找到项目压缩包下载地址 打开自己的github主页找到需要下载的项目首页,如图所示,找到zip下载地址(ps:如何找这个地址我就不多说了,了解过一点html的同学肯定很容易可以找到) ...
- 安卓电池健康查看软件AccuBattery 分享
一.天下苦秦久矣 说实话,我是小米的忠实粉丝(雷总打钱),手里目前是红米k30pro标准版, 室友中有用华为也有苹果的,据我所知苹果系统是可以看到电池健康的,但是安卓却不行, 所以推荐大家一个安卓软件 ...
- 在非k8s 环境下 的应用 使用 Dapr Sidekick for .NET
在k8s 环境下,通过Operator 可以管理Dapr sidecar, 在虚拟机环境下,我们也是非常需要这样的一个管理组件,类似下图:在这张图片中,在上图左面,我们看到了"dapr.ex ...
- python的注释、变量、常量基础
一.注释 1.什么是注释 注释就是对代码的解释说明,注释的内容不会被当作代码运行 2.为什么要注释 增强代码的可读性 3.怎么用注释? 代码注释单行和多行注释 单行注释用#号,可以跟在代码的正上方或正 ...
- 重定向管道流读取TXT文本第一次读取为""空字符串、type xxx.txt | go run . 报错、BOM头、[239,186,191] 字节数组
重定向管道流读取TXT文本第一次读取为""空字符串.type xxx.txt | go run . 报错.BOM头.[239 186 191] 字节数组
- 【面试普通人VS高手系列】lock和synchronized区别
今天来分享一道阿里一面的面试题,"lock和synchronized的区别". 对于这个问题,看看普通人和高手的回答! 普通人: 嗯,lock是J.U.C包里面提供的锁,synch ...