您的位置:首页 > 其它

实现文件批量选择,压缩为zip下载. 遇到的问题:ajax提交无法下载文件

2018-02-08 16:38 686 查看
要做一个批量选择文件,压缩成zip下载的功能,一直无法下载
最终的问题是ajax提交时无法正常下载文件,但是可以再success中访问 @RequestMapping("/batchDown/{mongoids}")
public void batchDown(@PathVariable(value="mongoids",required=false) String mongoids,
HttpServletResponse response, HttpServletRequest request) {
String zipName =getZipFilename();
// 头文件
response.setContentType("application/octet-stream");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=" + zipName);
ZipOutputStream zos = null;
// 压缩文件
try {
zos = new ZipOutputStream(response.getOutputStream());
} catch (IOException e1) {
e1.printStackTrace();
}
// --拼装
ArrayList<File> fileList = new ArrayList<File>();
String[] mongoidArr = mongoids.split(",");
for (String mongoid : mongoidArr) {
GridFSDBFile gfs = FileUtil.getFile(mongoid, "oa", mongoTemplate);
String filename = oaFileService.getFileNameByMongoId(mongoid);
File f = new File(filename);
try {
ZipUtils.inputstreamtofile(gfs.getInputStream(), f);
fileList.add(f);
} catch (IOException e) {
e.printStackTrace();
}

}
File[] files = fileList.toArray(new File[fileList.size()]);
try {
zipFile(files, "", zos);
zos.flush();
zos.close();
} catch (IOException e) {
e.printStackTrace();
}

}
/**
* 打包文件
*
* @param subs
* 文件数组
* @param baseName
* 自定义名字
* @param zos
* 输出流
* @throws IOException
*/
private void zipFile(File[] subs, String baseName, ZipOutputStream zos) throws IOException {
for (int i = 0; i < subs.length; i++) {
File f = subs[i];
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();
}
}

/**
* 压缩包名字
*
* @return
*/
private String getZipFilename() {
Date date = new Date();
String s = date.getTime() + ".zip";
return s;
}

前台最终采用链接打方法进行访问
location.href="/oa/OAFile/batchDown/"+mongoids
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文件下载 zip下载
相关文章推荐