最近遇到一個在跨域的情況下無法下載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中有時會失效,所以還是目前這種方式比較完美
咻咻~