/**
* 批量下载
* @param response
* @param request
* @param filename 自定义的文件名
* @param url 文件路径
*/
public static int down(HttpServletResponse response,HttpServletRequest request,String filename,String[] url){
/**创建一个临时压缩文件,这里的文件你可以自定义是.rar还是.zip*/
String fileName=encodingFileName(filename);
File file = new File(fileName);
try {
if(!file.exists()){
file.createNewFile();
}
/**要是弹出那个下载的框, 就必须有下边这两项的设置了 */
response.reset();
response.addHeader("Content-Disposition", "attachment; filename="+fileName);
response.setContentType("application/octet-stream");
/**创建文件输出流*/
FileOutputStream fous = new FileOutputStream(file);
/**打包的方法我们会用到ZipOutputStream这样一个输出流,所以这里我们把输出流转换一下*/
ZipOutputStream zipOut = new ZipOutputStream(fous);
/**这个方法可以得到服务器的具体路径*/
String path=request.getSession().getServletContext().getRealPath("/");
/**这个方法接受的就是一个所要打包文件的集合或数组,还有一个ZipOutputStream*/
String dir="upload/";
for(int i=0;i
/**dir服务器的upload文件夹 若有可以不写 */
File files2 = new File(path+dir+url[i].replace("/", "\\"));
File[] files1={files2};
FileUtil.zipFile(files1, zipOut);
}
zipOut.close();
fous.close();
/**接下来的就是往客户端写数据了*/
OutputStream out = response.getOutputStream();
BufferedInputStream bin = new BufferedInputStream(new FileInputStream(file.getPath()));
byte[] buf = new byte[8192];
int len = 0;
/**
* IE: out.write(buf,0,len);下载超出一个文件会出现异常,但是可以正常下载
* ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
* Firefox :可以正常运行, 目前还没有找到好的解决方法
*/
while ((len = bin.read(buf, 0, 8192)) != -1) {
out.write(buf, 0, len);
}
out.flush();
out.close();
} catch (IOException e) {
/**屏蔽异常信息*/
//e.printStackTrace();
}
return 1;
}