private ServletConfig config;
public void init(ServletConfig config) throws ServletException {
this.config = config;
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取页面传来的文件路径
String path = request.getParameter("filePath");
path = config.getServletContext().getRealPath("/") + path;
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
File file = new File(path);
zipFile(file, "", zos);
String name = file.getName();
+ URLEncoder.encode(name + ".zip", "utf-8"));
zos.flush();
zos.close();
}
private void zipFile(File f, String baseName, ZipOutputStream zos)
throws IOException {
if (f.exists() && f.isFile()) {
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();
} else {
String dirName = baseName + f.getName() + "/";
zos.putNextEntry(new ZipEntry(dirName));
File[] subs = f.listFiles();
for (File file : subs) {
zipFile(file, dirName, zos);
}
}
public void init(ServletConfig config) throws ServletException {
this.config = config;
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取页面传来的文件路径
String path = request.getParameter("filePath");
path = config.getServletContext().getRealPath("/") + path;
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
File file = new File(path);
zipFile(file, "", zos);
String name = file.getName();
name = name.substring(0, name.lastIndexOf("."));
//这块主要是设置响应信息,其中filename是下载下的zip文件的名字,如果没有这段代码下载的格式将是没有扩展名的
response.setHeader("Content-disposition", "attachment;filename="+ URLEncoder.encode(name + ".zip", "utf-8"));
zos.flush();
zos.close();
}
private void zipFile(File f, String baseName, ZipOutputStream zos)
throws IOException {
if (f.exists() && f.isFile()) {
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();
} else {
String dirName = baseName + f.getName() + "/";
zos.putNextEntry(new ZipEntry(dirName));
File[] subs = f.listFiles();
for (File file : subs) {
zipFile(file, dirName, zos);
}
}
}
自己项目中使用的故记录下来供大家参考