在日常项目开发中,我们会经常遇到,上传下载以及打包的常用功能,本节中就如何利用JAva自带的类库,实现zip压缩打包文件下载进行详细说明。注:不支持中文文件名,可在上传时就重命名文件名称.(下面是我的完整项目下载类代码,改下自己的包名即可使用)。
正题:
中间层Java代码:
package com.etong.out.web;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipOutputStream;
public class ZipUtils {
private String fileName;
public void zipFile(File[] subs, String baseName, ZipOutputStream zos) throws IOException {
for (int i=0;i<subs.length;i++) {
File f=subs[i];
zos.putNextEntry(new ZipEntry(baseName + f.getName()));
FileInputStream fis = new FileInputStream(f);
byte[] buffer = new byte[1024];
int r = 0;
while ((r = fis.read(buffer)) != -1) {
zos.write(buffer, 0, r);
}
fis.close();
zos.flush();
zos.close();
}
}
public String getZipFileName() {
return fileName;
}
public void setZipFileName(String fileName) {
this.fileName = fileName+new Date().getTime()+".zip";
}
}
JSP引用方法:
<%
SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd_hhMMss");
response.setHeader("Content-disposition","attachment;filename=JMS"+f.format(new Date())+".zip");
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
List jmsList = (List)workflowCommonDao.getListResult("OutNet.getNsrJmsWjxx",null);
File[] files = new File[jmsList.size()];
for(int i=0; i<jmsList.size(); i++){
String inputStream = ((HashMap)jmsList.get(i)).get("WJDZ").toString();
files[i]=new File(inputStream);
}
ZipUtils zipUtil = new ZipUtils();
zipUtil.zipFile(files,"JmsFiles/", zos);
zos.flush();
zos.close();
%>
根据上述内容轻松完成了文件打包下载功能,这里JSP页面通过从数据库里面获得文件地址(当然也可以自己传相关文件路径)将相关文件打包至定义的zip包中,以供客户端进行下载保存!