随手一记,仅做参考
环境:
zxdeMacBook-Pro:jvc zhangxu$ node -v
v12.16.3
zxdeMacBook-Pro:jvc zhangxu$ npm -v
6.14.4
下载请求:
axios({ // 用axios发送post请求
method: 'post',
url: '/report/download/req', // 请求地址
data: params, // 参数
responseType: 'blob', // 表明返回服务器返回的数据类型
})
.then((res2) => { // 处理返回的文件流
const content = res2.data;
const blob = new Blob([content]);
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);
}
});
});
后台接口:
private static final String ATTACHMENT = "attachment";
private static final String SHEET_NAME="Sheet1";
private static final String FILE_NAME="OutPutFile.xlsx";
private static final String FILE_PATH = File.separator+"Users"+File.separator+"已存在文件夹名"+File.separator;
/**
* 选中指定数据进行下载的接口
*/
@PostMapping("/download")
public ResponseEntity<byte[]> download(@RequestBody ExportParams exportParams) {
//1、参数校验
。。。
String expPath = FILE_PATH+FILE_NAME;
//目录不存在则创建目录
boolean createResult = createDir(FILE_PATH);
if(!createResult){
throw new BizException("下载失败,错误信息:文件目录创建失败");
}
//2、生成文件File至expPath
//3、文件名覆盖导出
try {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData(ATTACHMENT, FILE_NAME);
File file = new File(expPath);
return new ResponseEntity<>(FileUtils.readFileToByteArray(file),
headers, HttpStatus.CREATED);
} catch (Exception e) {
log.error("downloadTemplate() failed",e);
throw new BizException("下载失败,错误信息:"+e.getMessage());
}
}