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 ...
随机推荐
- Episode 3:我们想要更好的社交网络
我们为什么爱看评论?怎样的人类文字最有效率?更「好」的手机设计.APP 设计?APP Store 已经十年了?这是 WEB VIEW 的第三期节目<我们想要更好的社交网络>. 链接描述 s ...
- canvas小游戏——flappy bird
前言 如果说学编程就是学逻辑的话,那锻炼逻辑能力的最好方法就莫过于写游戏了.最近看了一位大神的fly bird小游戏,感觉很有帮助.于是为了寻求进一步的提高,我花了两天时间自己写了一个canvas版本 ...
- Android控件设置半透明+EditText设置默认值+ 控件居中
Android控件设置半透明 效果 代码: android:background="#50FFFFFF" 50表示50%透明 Android:EditText设置默认值 andro ...
- git总是需要输入用户名密码问题解决
解决办法: git bash进入你的项目目录,输入: git config --global credential.helper store 然后你会在你本地生成一个文本,上边记录你的账号和密码.当然 ...
- ssm整合-ssmbuild
目录 项目结构 导入相关的pom依赖 Maven资源过滤设置 建立基本结构和配置框架 Mybatis层编写 Spring层 Spring整合service层 SpringMVC层 Controller ...
- linux mysql授权远程连接,创建用户等
1.进入mysql 2.此命令是为密码为 root .IP(%)任意的 root 用户授权.(*.* 表示数据库.表,to后为root用户:%:模糊查询,所有 IP 都可以,可指定其他主机 IP:by ...
- uniapp报错:Browserslist: caniuse-lite is outdated. Please run next command `npm update`
uni-app的编译器是基于npm的,依赖了众多包括mpvue.webpack在内的npm库,这些库又引用了一个三方库caniuser-lite.caniuser-lite这个库的代码里有个浏览器兼容 ...
- 《手把手教你》系列基础篇(八十七)-java+ selenium自动化测试-框架设计基础-Log4j 2实现日志输出-上篇(详解教程)
1.简介 Apache Log4j 是一个非常古老的日志框架,并且是多年来最受欢迎的日志框架. 它引入了现代日志框架仍在使用的基本概念,如分层日志级别和记录器. 2015 年 8 月 5 日,该项目管 ...
- 11.Flink实时项目之支付宽表
支付宽表 支付宽表的目的,最主要的原因是支付表没有到订单明细,支付金额没有细分到商品上, 没有办法统计商品级的支付状况. 所以本次宽表的核心就是要把支付表的信息与订单明细关联上. 解决方案有两个 一个 ...
- bat脚本删除一周前的文件
bat脚本删除7天前的文件 @echo off forfiles /p D:\logstash-1.4.2\bin\ /m *.log -d -7 /C "cmd /c del /f @pa ...