Web端文件打包.zip下载

使用ant.jar包的API进行文件夹打包。直接上代码:

 1             String zipfilename = "test.zip";
 2             File zipfile = new File(zipfilename);
 3             org.apache.tools.ant.types.FileSet fileSet = new FileSet();
 4             org.apache.tools.ant.Project prj = new Project();
 5             org.apache.tools.ant.taskdefs.Zip zip = new Zip();
 6             zip.setProject(prj);
 7             zip.setDestFile(zipfile);
 8             fileSet.setProject(prj);
 9             fileSet.setDir(file); // 这里是文件路径的设置。
10             zip.addFileset(fileSet);
11             zip.execute();
12             HttpServletResponse response = super.currentResponse;
13             response.setHeader("Content-Type", "application/zip");
14             response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(zipfilename, "UTF-8"));
15             OutputStream os = response.getOutputStream();
16             InputStream is = new FileInputStream(zipfile);
17             DownloadUtil.transfer(is, os);
18             zipfile.delete();

如果在下载的时候,不希望下载文件路径下的所有文件,而是部分符合自己需求的文件的话。

下面这个例子,除了check了需求之外,还远端的文件进行了操作,利用ChannelSftp取得的连接,进行文件读入并下载。

如下:

private com.jcraft.jsch.ChannelSftp         channel; // 这行是类成员变量
 1 String zipfilename = getServerZipFileName(inputfilename);
 2
 3         if (channel == null || !channel.isConnected()) {
 4             channel = SftpUtils.connect(sftpHost, Integer.parseInt(sftpPort), sftpUsername, sftpPassword);// 取得连接。
 5         }
 6
 7         HttpServletResponse response = super.currentResponse;
 8
 9         try {
10             boolean isMultiFilesName = isMultiFilesName(inputfilename);
11             Vector <com.jcraft.jsch.ChannelSftp.LsEntry> vs = channel.ls(logfilepath);
12             if (vs.isEmpty()) {
13                 return false;
14             } else {
15                 response.setHeader("Content-Type", "application/octet-stream");
16                 response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(zipfilename, "UTF-8"));
17                 OutputStream out = response.getOutputStream();
18                 java.util.zip.ZipOutputStream zipOut = new ZipOutputStream(new BufferedOutputStream(out));
19                 for (LsEntry entry : vs) {
20                     if (entry.getAttrs().toString().startsWith("-")) {
21                         String entryname = entry.getFilename();
22                         if (isMultiFilesName && entryname.startsWith(inputfilename.substring(0, inputfilename.length() - 1))
23                                 && !entryname.matches("^.*[\\*]+.*$") || entryname.equals(inputfilename)) { // 符合规则的文件才做输出处理
24                             java.util.zip.ZipEntry zipentry = new ZipEntry(entryname);
25                             zipOut.putNextEntry(zipentry);
26                             InputStream bis = channel.get(logfilepath + entryname); // 这里要注意,目标目录下的文件名称,不能有*,不然这一步get方法的目标可能是多个文件而出错。
27                             if (bis != null) {
28                                 int count = 0;
29                                 byte[] buffer = new byte[8192];
30                                 while ((count = bis.read(buffer)) > 0) {
31                                     zipOut.write(buffer, 0, count);
32                                 }
33                                 bis.close();
34                             }
35                         }
36                     }
37                 }
38                 zipOut.close();
39             }
40         } catch (Exception e) {
41             response.reset();
42             e.printStackTrace();
43             return false;
44         } finally {
45             if (channel != null && !channel.isClosed()) {
46                 channel.getSession().disconnect();
47                 channel.disconnect();
48             }
49         }
时间: 2024-11-05 23:27:27

Web端文件打包.zip下载的相关文章

Asp.Net Web Api 2 实现多文件打包并下载文件示例源码_转

一篇关于Asp.Net Web Api下载文件的文章,之前我也写过类似的文章,请见:<ASP.NET(C#) Web Api通过文件流下载文件到本地实例>本文以这篇文章的基础,提供了ByteArrayContent的下载以及在下载多个文件时实现在服务器对多文件进行压缩打包后下载的功能.关于本文中实现的在服务器端用.NET压缩打包文件功能的过程中,使用到了一个第方类库:DotNetZip,具体的使用将在正文中涉及.好了,描述了这么多前言,下面我们进入本文示例的正文. 一.创建项目 1.1 首先创

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

总结: 使用PHP下载文件的操作需要给出四个header(),可以参考我的另一篇博文:PHP如何实现下载功能超详细流程分析 计算文件的大小的时候,并不需要先打开文件,通过filesize($filename)就可以看出,如果需要先打开文件的话,filesize可能就会是这样的形式了filesize($filehandle) 向客户端回送数据的是,记得要设置一个buffer,用来指定每次向客户端输出多少数据,如:$buffer=1023.如果不指定的话,就会将整个文件全部写入内存当中,再一次性的讲

Win Form + ASP.NET Web Service 文件上传下载--HYAppFrame

本章节主要讲解HYAppFrame服务器端如何ASP.NET Web Service实现文件(含大文件)上传,WinForm客户端如何下载文件. 1    服务器端文件上传 1.1 上传文件 函数FileUpload(stringfileFullPath, byte[] file)用于上传文件,生成文件前检查文件路径所在文件夹是否存在,不存在则首先创建文件夹. [WebMethod(EnableSession = true,Description = "上传文件")] public i

asp.net 文件压缩zip下载

 今天分享下昨天做的一个东西 asp.net 的文件  zip 批量下载,首先你需要去 到http://dotnetzip.codeplex.com这个站点下载zip 的包,在里面找到 Ionic.Zip.dll  引用到你的项目中去 /// <summary> /// 批量zip下载 /// </summary> /// <param name="Listimg">这里Listimg 是一个数组类型</param> public voi

web端文件上传,预览,下载,删除

//HTML部分 <div class="item attachment attachmentNew"> <span class="name">附件</span> <span class="triggerUpLoad btnSpan" onclick="triggerUpLoadList(this)" v-show="operationType<2">&

C#利用ICSharpCode将远程文件打包并下载

方法主体代码: public void GetFilesByOrder(string Order_ID, string IntNumber) { MemoryStream ms = new MemoryStream(); byte[] buffer = null; List<MaterialInfo> mList = mBll.SelectEntitys(m => m.Owner_ID == Order_ID); using (ZipFile file = ZipFile.Create(

web day22 文件上传,下载,JavaMail

上传 (上传不能使用BaseServlet) 1. 上传对表单限制 *method="post" *enctype="multipart/form-data" * 表单中需要添加文件表单项:<inputtype="file" name="xxx" /> <form action="xxx"method="post" enctype="multipart/for

java+web+大文件上传下载

文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用HTML5的API,对文件上传进行渐进式增强:     * iframe上传  * ajax上传  * 进度条  * 文件预览  * 拖放上传 1.1 传统形式 文件上传的传统形式,是使用表单元素file,参考 http://www.ruanyifeng.com/blog/2012/08/file_

Web下文件上传下载的路径问题

工程结构 1.生成一个文件到指定文件夹下 //产生一个唯一的名字 this.setFileName(String.valueOf(System.currentTimeMillis())); String path = ServletActionContext.getServletContext().getRealPath("/template/WordExportTemplate"); //工程下的完整路径名 String filepath = path +"\\"