/**
* 批量下载控制
* @param response
* @param request
*/
@RequestMapping(value = “/file/batDownload”, method = RequestMethod.POST)
public void downloadAllFilePost(HttpServletResponse response,HttpServletRequest request) {
this.downloadAllFile(response,request);
}
/**
* 批量下载--读取文件并且压缩成一个文件
* @param response
* @param request
*/
public void downloadAllFile(HttpServletResponse response,HttpServletRequest request) {
String downloadName = "XXXXXX平台附件.zip";
try {
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(downloadName, "UTF-8"));
} catch (UnsupportedEncodingException e) {
System.out.println("下载文件名编码时出现错误.");
e.getMessage();
}
OutputStream outputStream = null;
ZipOutputStream zos = null;
try {
outputStream = response.getOutputStream();
zos = new ZipOutputStream(outputStream);
// 将文件流写入zip中
downloadTolocal(zos,request);
} catch (IOException e) {
System.out.println("downloadAllFile-XXXXXX平台下载全部附件失败");
e.getMessage();
}finally {
if(zos != null) {
try {
zos.close();
} catch (Exception e2) {
System.out.println("关闭输入流时出现错误");
}
}
if(outputStream != null) {
try {
outputStream.close();
} catch (Exception e2) {
System.out.println("关闭输入流时出现错误");
e2.printStackTrace();
}
}
}
}
/**
-
下载压缩文件
-
@param zos
-
@param request
-
@throws IOException
*/
private void downloadTolocal(ZipOutputStream zos,HttpServletRequest request) throws IOException {
//获取文件信息(此处为业务代码,可根据自己的需要替换)
String fileId=request.getParameter(“fileId”);
String[] strArray = fileId.split(",");
List filenames=new ArrayList<>();
String serverName = System.getProperty(“os.name”);
String serverSeparator = System.getProperty(“file.separator”);
if(“Linux”.equals(serverName) || “/”.equals(serverSeparator)){
//解决linux中文乱码
zos.setEncoding(System.getProperty(“sun.jnu.encoding”));
}
for (int i = 0; i < strArray.length; i++) {
MtrbFileModel fileModel = commonService.get(MtrbFileModel.class, strArray[i]);
String fileName =fileModel.getFilename();
filenames.add(fileName);
//文件名称(带后缀)
int sum=0;
if(filenames.size()>0){
for(int j=0;j<filenames.size();j++){
if(filenames.get(j).equals(fileName) && i !=j){
sum++;
}
}
}
if(sum>0){
String nameBefore=org.apache.commons.lang3.StringUtils.substringBeforeLast(fileName, “.”);
String nameAfter=org.apache.commons.lang3.StringUtils.substringAfterLast(fileName, “.”);
fileName=nameBefore+"("+sum+")."+nameAfter;
}
InputStream is = null;
BufferedInputStream in = null;byte[] buffer = new byte[1024]; int len; //创建zip实体(一个文件对应一个ZipEntry) ZipEntry entry = new ZipEntry(fileName); try { //获取需要下载的文件流 is = new FileInputStream(rootPath+fileModel.getFileurl()); in = new BufferedInputStream(is); //解决linux中文乱码 if("Linux".equals(serverName) || "/".equals(serverSeparator)){ entry.setUnixMode(644); } zos.putNextEntry(entry); //文件流循环写入ZipOutputStream while ((len = in.read(buffer)) != -1 ) { zos.write(buffer, 0, len); } } catch (Exception e) { System.out.println("XXXXXX--下载全部附件--压缩文件出错"); }finally { if(entry != null) { try { zos.closeEntry(); } catch (Exception e2) { System.out.println("XXXXXX下载全部附件--zip实体关闭失败"); } } if(in != null) { try { in.close(); } catch (Exception e2) { System.out.println("XXXXXX平台下载全部附件--文件输入流关闭失败"); } } if(is != null) { try { is.close(); }catch (Exception e) { System.out.println("XXXXXX平台下载全部附件--输入缓冲流关闭失败"); } } }
}
}