最近遇到一个在跨域的情况下无法下载excel文件的问题(我的项目通过Iframe集成到他人系统上)
核心代码
下载文件通过bold
import {
saveAs
} from 'file-saver';
axios({
method:'get',
url:'下载文件地址',
responseType:'blob'
})
.then(function(response) {
const content = response.data;
const fileName = decodeURI(
response.headers["content-disposition"].split(";")[1].split("=")[1]
);
saveAs(content, fileName);
});
上述fileName就是获取response headers中content-disposition响应头从而获取名称
然而在跨域的情况下是获取不到除默认的响应头之外的响应头的
解决方式
增加响应头Access-Control-Expose-Headers
Access-Control-Expose-Headers: Content-disposition, Content-Type,Cache-control 等等
如上就可以访问到Content-disposition, Content-Type,Cache-control的响应头数据
后记:
文件下载IE无法下载可以采用这种方式,使用location.href ,IE中有时会失效,所以还是目前这种方式比较完美
咻咻~