ajaxaxios请求下载文件,解析后端传回的header
目录
ajax/axios请求下载文件,解析后端传回的header
ajax/axios请求下载文件,解析后端传回的header
前端接收到后端返回的数据
从数据中可以看到filename就是后端设置的文件名称,通过自己设置文件名称可以识别要下载文件的格式,保证下载文件可以使用,也可以设置其他你需要的参数,具体设置返回header的方法后面我会贴出代码段。
解析请求代码
前端 js
代码片
function downloadFile(id) {
axios.post('/TradingPlatfrom/user/downloadFile', {
id : id
}, {
emulateJSON : false,
responseType: 'blob' // 响应数据格式blob
}).then(function(res) {
let blob = res.data;
let reader = new FileReader();
reader.readAsDataURL(blob);
reader.onload = (e) => {
let a = document.createElement('a');
a.download = decodeURI(res.headers.filename); // res.header.filename
// 后端自己设置下载的文件名
//也可以取到设置的别的需要的数据
a.href = e.target.result;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}
}, function(res) {
console.log(res.status);
});
}
后端返回设置请求头
代码片
/**
* filename文件名字 response 响应对象
*/
public String downLoad(String filename, HttpServletResponse response) throws UnsupportedEncodingException {
File file;
if (filename != null && filename.length() > 0) {
file = new File(upPath + "/" + filename);
} else {
filename = "销售合同.docx";
file = new File(downPath + "/" + filename);
}
if (file.exists()) {
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition",
"attachment;fileName=" + java.net.URLEncoder.encode(filename.toString(), "UTF-8"));
response.setHeader("fileName", java.net.URLEncoder.encode(filename, "UTF-8")); //设置返回下载的文件名称,也可以设置别的需要的数据
byte[] buffer = new byte[1024];
FileInputStream fis = null;
BufferedInputStream bis = null;
OutputStream os = null;
try {
os = response.getOutputStream();
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer);
i = bis.read(buffer);
}
} catch (Exception e) {
e.printStackTrace();
return "false";
}
System.out.println("----------file download---" + filename);
try {
bis.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return "true";
}
以上就是下载文件包括,解析后端传回来的header,如果有问题欢迎指出。