前端部分
Doc.batchDownload = function(){
// alert('批量下載');
var selected = $('#' + this.id).bootstrapTable('getSelections');
var parameter = new Array();
for(var i=0;i<selected.length;i++){
console.log(selected[i]);
parameter.push(encodeURI(selected[i].path));
}
var attachUrl = parameter.toString();
var path = "docbrowser/batchDownload?attachUrl="+parameter.toString();
location.href=path;
}
後臺部分
//批量下載文件
@RequestMapping(value="batchDownload")
@ResponseBody
@ZhName(zhName="批量下載文件")
public void batchDownload(HttpServletRequest request,HttpServletResponse response){
String tmpFileName = "demo.zip";
byte[] buffer = new byte[2048];
String strZipPath = "e:\\"+tmpFileName;
ZipOutputStream out = null;
FileInputStream fis = null;
BufferedInputStream bins = null;
BufferedOutputStream bouts = null;
try {
out = new ZipOutputStream(new FileOutputStream(strZipPath));
List<String> fileList = new ArrayList<String>();
String attachUrl = request.getParameter("attachUrl");
String[] split = attachUrl.split(",");
for(int i=0;i<split.length;i++){
fileList.add(split[i]);
}
// fileList.add("D:\\logs\\1.bat");
// fileList.add("D:\\logs\\1.jpg");
// fileList.add("D:\\logs\\POI3.5_HSSF_和XSSF_Excel操作快速入門手冊.pdf");
for(int i=0;i<fileList.size();i++){
fis = new FileInputStream(new File(fileList.get(i)));
out.putNextEntry(new ZipEntry(fileList.get(i).substring(fileList.get(i).indexOf(":")+1)));
int len;
while((len = fis.read(buffer)) > 0){
out.write(buffer, 0, len);
}
out.closeEntry();
}
File file = new File(strZipPath);
// if(file.exists()){
bins = new BufferedInputStream(new FileInputStream(strZipPath));
bouts = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/x-msdownload;");
// response.setContentType("APPLICATION/octet-stream");
response.setHeader("Content-disposition","attachment;filename="+ new String(tmpFileName.getBytes("utf-8"), "ISO8859-1"));
int bytesRead = 0;
while((bytesRead = bins.read(buffer))!=-1){
bouts.write(buffer, 0, bytesRead);
}
// }
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
bouts.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
bins.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}