在java项目中使用Zip打包实现文件下载

zip压缩下载不仅可以减少网络传输,而且可以实现批量的文件下载。最近在项目中用到,写了个工具类,如下

/*
 * @{#} ZipUtils.java Create on Jan 18, 2010 2:45:47 PM
 * Copyright (c) 2009 by Huashui.
 */
package com.peaksport.export.zip;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 *@author huashui
 *@blog http://huashui.org
 *使用方法,传递response和要打包的文件即可。
 */
public class ZipHandler {
 
	private HttpServletRequest request;
	private HttpServletResponse response;
	private List<File> fileList = new ArrayList<File>();
 
	public ZipHandler(HttpServletResponse response, List<File> fileList) {
		super();
		this.response = response;
		this.fileList = fileList;
	}
 
	public ZipHandler() {
		super();
	}
 
	public void createZip(String filename) throws IOException {
		response.setHeader("Content-disposition", "attachment; filename="
				+ filename);
		response
				.setHeader("Cache-Control",
						"must-revalidate, post-check=0, pre-check=0,private, max-age=0");
		response.setHeader("Content-Type", "application/octet-stream");
		response.setHeader("Content-Type", "application/force-download");
		response.setHeader("Pragma", "public");
		response.setHeader("Cache-Control",
				"must-revalidate, post-check=0, pre-check=0");
 
		byte[] buffer = new byte[1024];
		ZipOutputStream out = new ZipOutputStream(response.getOutputStream());
		//需要同时下载的文件,以一个list传递进来
		for (File tempfile : fileList) {
			FileInputStream fis = new FileInputStream(tempfile);
			out.putNextEntry(new ZipEntry(tempfile.getName()));
			int len;
			while ((len = fis.read(buffer)) > 0) {
				out.write(buffer, 0, len);
			}
			out.closeEntry();
 
			fis.close();
 
		}
		out.flush();
		out.close();
 
	}
 
	public HttpServletRequest getRequest() {
		return request;
	}
 
	public void setRequest(HttpServletRequest request) {
		this.request = request;
	}
 
	public HttpServletResponse getResponse() {
		return response;
	}
 
	public void setResponse(HttpServletResponse response) {
		this.response = response;
	}
 
	public List<File> getFileList() {
		return fileList;
	}
 
	public void setFileList(List<File> fileList) {
		this.fileList = fileList;
	}
 
}

Post a Comment