Web端文件打包.zip下载
使用ant.jar包的API进行文件夹打包。直接上代码:
String zipfilename = "test.zip";
File zipfile = new File(zipfilename);
org.apache.tools.ant.types.FileSet fileSet = new FileSet();
org.apache.tools.ant.Project prj = new Project();
org.apache.tools.ant.taskdefs.Zip zip = new Zip();
zip.setProject(prj);
zip.setDestFile(zipfile);
fileSet.setProject(prj);
fileSet.setDir(file); // 这里是文件路径的设置。
zip.addFileset(fileSet);
zip.execute();
HttpServletResponse response = super.currentResponse;
response.setHeader("Content-Type", "application/zip");
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(zipfilename, "UTF-8"));
OutputStream os = response.getOutputStream();
InputStream is = new FileInputStream(zipfile);
DownloadUtil.transfer(is, os);
zipfile.delete();
如果在下载的时候,不希望下载文件路径下的所有文件,而是部分符合自己需求的文件的话。
下面这个例子,除了check了需求之外,还远端的文件进行了操作,利用ChannelSftp取得的连接,进行文件读入并下载。
如下:
private com.jcraft.jsch.ChannelSftp channel; // 这行是类成员变量
 String zipfilename = getServerZipFileName(inputfilename);
         if (channel == null || !channel.isConnected()) {
             channel = SftpUtils.connect(sftpHost, Integer.parseInt(sftpPort), sftpUsername, sftpPassword);// 取得连接。
         }
         HttpServletResponse response = super.currentResponse;
         try {
             boolean isMultiFilesName = isMultiFilesName(inputfilename);
             Vector <com.jcraft.jsch.ChannelSftp.LsEntry> vs = channel.ls(logfilepath);
             if (vs.isEmpty()) {
                 return false;
             } else {
                 response.setHeader("Content-Type", "application/octet-stream");
                 response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(zipfilename, "UTF-8"));
                 OutputStream out = response.getOutputStream();
                 java.util.zip.ZipOutputStream zipOut = new ZipOutputStream(new BufferedOutputStream(out));
                 for (LsEntry entry : vs) {
                     if (entry.getAttrs().toString().startsWith("-")) {
                         String entryname = entry.getFilename();
                         if (isMultiFilesName && entryname.startsWith(inputfilename.substring(0, inputfilename.length() - 1))
                                 && !entryname.matches("^.*[\\*]+.*$") || entryname.equals(inputfilename)) { // 符合规则的文件才做输出处理
                             java.util.zip.ZipEntry zipentry = new ZipEntry(entryname);
                             zipOut.putNextEntry(zipentry);
                             InputStream bis = channel.get(logfilepath + entryname); // 这里要注意,目标目录下的文件名称,不能有*,不然这一步get方法的目标可能是多个文件而出错。
                             if (bis != null) {
                                 int count = 0;
                                 byte[] buffer = new byte[8192];
                                 while ((count = bis.read(buffer)) > 0) {
                                     zipOut.write(buffer, 0, count);
                                 }
                                 bis.close();
                             }
                         }
                     }
                 }
                 zipOut.close();
             }
         } catch (Exception e) {
             response.reset();
             e.printStackTrace();
             return false;
         } finally {
             if (channel != null && !channel.isClosed()) {
                 channel.getSession().disconnect();
                 channel.disconnect();
             }
         }
Web端文件打包.zip下载的更多相关文章
- 打包zip下载
		
//首先引入的文件为org.apache的切记不是jdk的import org.apache.tools.zip.ZipOutputStream;import org.apache.tools.zip ...
 - Asp.Net Web Api 2 实现多文件打包并下载文件示例源码_转
		
一篇关于Asp.Net Web Api下载文件的文章,之前我也写过类似的文章,请见:<ASP.NET(C#) Web Api通过文件流下载文件到本地实例>本文以这篇文章的基础,提供了Byt ...
 - 文件打包,下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
		
总结: 使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文: ...
 - asp.net 文件压缩zip下载
		
今天分享下昨天做的一个东西 asp.net 的文件 zip 批量下载,首先你需要去 到http://dotnetzip.codeplex.com这个站点下载zip 的包,在里面找到 Ionic.Z ...
 - java 多个文件打包zip
		
/** * 多个文件打包成zip */ public class ZipDemo { private static void create() throws Exception{ String pat ...
 - 批量下载,多文件压缩打包zip下载
		
0.写在前面的话 图片批量下载,要求下载时集成为一个压缩包进行下载.从昨天下午折腾到现在,踩坑踩得莫名其妙,还是来唠唠,给自己留个印象的同时,也希望给需要用到这个方法的人带来一些帮助. 1.先叨叨IO ...
 - web端文件上传,预览,下载,删除
		
//HTML部分 <div class="item attachment attachmentNew"> <span class="name&quo ...
 - C#利用ICSharpCode将远程文件打包并下载
		
应用于ASP.NET MVC中 方法主体代码: public void GetFilesByOrder(string Order_ID, string IntNumber) { MemoryStrea ...
 - Java Springboot 根据图片链接生成图片下载链接 及 多个图片打包zip下载链接
		
现有一些图片在服务器上的链接,在浏览器中打开这些链接是直接显示在浏览器页面的形式. 现在需要生成这些图片的单独下载以及打包下载链接,即在浏览器中打开下载链接后弹出下载框提示下载.由于前端存在跨域问题, ...
 
随机推荐
- opencv+ffmpeg实现avi视频的播放
			
配了一天,终于成功的在ubuntu上安装了ffmpeg,实现了opencv对avi文件的读取. 在CvCapture* pCapture=cvCaptureFromAVI("video.av ...
 - 11个Linux基础面试问题
			
Q.1: Linux 操作系统的核心是什么? Shell Kernel Command Script Terminal 答: 内核(Kernel)是Linux 操作系统的核心.Shell是一个命令行解 ...
 - AbstractMap学习记录
			
package java.util;import java.util.Map.Entry; /** * This class provides a skeletal implementation of ...
 - 前端CSS编程之道-LESS
			
由于前端css编写繁琐,最近开始学习LESS,用LESS编写文件.less文件可以直接编译成我们要的.css文件 学习Less 我下面是我练习时的截图,希望小伙伴也能动手自己写一下,而不是复制粘贴模式 ...
 - Android 移动缩放的ImageView
			
今天介绍一下Android中怎么实现ImageView的缩放和移动,自定义TouchImageView. public class TouchImageView extends ImageView { ...
 - Android Studio 使用genymotion 模拟器运行app时 提示找不到任何设备
			
原因是使用了genymotion 默认的Android toos .打开genymotion 选择设置 ADB 使用自己的SDKtools 选择Android Studio 使用的SDK位置就行 ...
 - 指针属性直接赋值 最好先retain 否则内存释放导致crash
			
//先释放之前的 YK_RELEASE_SAFELY(_selectedDate); //retain新的 _selectedDate = [aDate retain]; NSString 属性的好像 ...
 - 2013年8月份第3周51Aspx源码发布详情
			
BaiduMusic Cache源码 2013-8-23 [VS2012]功能介绍:可以读取并保存百度音乐(Win8应用程序商店版本)的缓存.可以检测电脑是否安装了百度音乐,支持缓存音乐的导出功能. ...
 - <矩阵的基本操作:矩阵相加,矩阵相乘,矩阵转置>
			
//矩阵的基本操作:矩阵相加,矩阵相乘,矩阵转置 #include<stdio.h> #include<stdlib.h> #define M 2 #define N 3 #d ...
 - TVB-Gone 红外编码方法
			
每次都重新推算一遍,年纪大了还是记录一下吧(硬件版的TV-B-Gone的压缩编码跳过此段往下看) N900上有个TVB-Gone的程序,但是程序的红外编码往往都是对应的国外的电视,好多国产电视都不支持 ...