jsp页面
<h1>批量下载</h1>
<form action="batchDownloadServlet">
<input type="checkbox" name="filename" value="img1-lg.jpg">img1
<input type="checkbox" name="filename" value="img3-thumb.jpg">img3
<input type="checkbox" name="filename" value="img2-thumb.jpg">img2
<input type="submit" value="下载">
</form>
servlet控制器
package com.imooc.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BatchDownloadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置响应头信息
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition","attachment;filename=test.zip");
//设置根路径
String path = getServletContext().getRealPath("/")+"images/";
//获取要下载文件的数组
String[] filenames = request.getParameterValues("filename");
String str ="";
String rt ="\r\n";
//Zip压缩要下载的文件
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
//循环读取每个文件写入到ZipOutputStream中
for(String filename : filenames){
str += filename+rt;
//得到文件
File file = new File(path+filename);
//设置需要压缩的下一个文件条目
zos.putNextEntry(new ZipEntry(filename));
//读取需要下载的文件内容
FileInputStream fis = new FileInputStream(file);
//读取文件,循环写入到压缩流当中
byte[] b = new byte[4096];
int len = 0;
while((len = fis.read(b)) != -1){
zos.write(b, 0, len);
}
zos.flush();
fis.close();
}
zos.setComment("download success:"+rt+str);
zos.flush();
zos.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}