XMLHttpRequest 跨域请求CORS会出现http响应头不全的情况,但是在chrome中正常显示,js获取不全。需要在服务端增加配置响应的请求头。
HttpServletResponse res = (HttpServletResponse) response;
res.setHeader("Access-Control-Expose-Headers","Content-Disposition");
前端响应时即可拿到。
附带ts请求方法
async downloadFile ( url :string ,fileName?:string ){
let req = new XMLHttpRequest();
let token = await TokenUtil.getToken();
req.open( "get",`${BASE_URL}${url}` );
req.setRequestHeader("x-access-token",token );
req.responseType = 'blob';
req.onreadystatechange = ()=>{
if (req.readyState === 4 && req.status === 200) {
console.log(req.getAllResponseHeaders());
let headerfileName = req.getResponseHeader("Content-Disposition") ;
if(headerfileName){
fileName = decodeURI( headerfileName.replace('attachment;filename=','') );
}
let blob = new Blob([req.response], {type: "application/msword;charset=utf-8"});
let csvUrl = URL.createObjectURL(blob);
let link = document.createElement('a');
link.href = csvUrl;
link.download = fileName ;
link.click();
}else{
CustomUtil.Toast('下载服务异常。');
}
}
req.send();
}