从后端下载zip文件压缩包
vue文件处理
下面展示对后台传回的 数据流
的处理。
Vue.prototype.$exportClick = function(res, name = "下载.zip") {
const content = res;
const blob = new Blob([content]);
const fileName = name;
if ("download" in document.createElement("a")) {
// 非IE下载
const elink = document.createElement("a");
elink.download = fileName;
elink.style.display = "none";
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
URL.revokeObjectURL(elink.href); // 释放URL 对象
document.body.removeChild(elink);
} else {
// IE10+下载
navigator.msSaveBlob(blob, fileName);
}
};
后台传回zip数据流
获取 zip数据流
。
public ResponseInfo exportPhoto(HttpServletResponse response) throws IOException {
//获取员工照片map
Map<String, String> photoMap = personService.findPhotoInfo();
response.setContentType("application/x-download;charset=UTF-8");
response.addHeader("Content-disposition", "filename=employee.xls");
ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
Iterator<Map.Entry<String, String>> entryIterator = photoMap.entrySet().iterator();
FileInputStream fis;
ZipEntry zipEntry;
File file;
Map.Entry<String, String> entry;
while (entryIterator.hasNext()) {
entry = entryIterator.next();
zipEntry = new ZipEntry(entry.getKey() + ".jpg");
zipOut.putNextEntry(zipEntry);
file = new File(realPathResolver.get(entry.getValue()));
try {
fis = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
continue;
}
byte[] bytes = new byte[1024];
int len = 0;
while ((len = fis.read(bytes)) != -1) {
zipOut.write(bytes, 0, len);
}
fis.close();
}
zipOut.close();
return new ResponseInfo();
}