例如,下载PDF文件:
axios.get('/file.pdf', {
responseType: 'arraybuffer',
headers: {
'Accept': 'application/pdf'
}
}).then(response => {
const blob = new Blob([response.data], {
type: 'application/pdf',
});
FileSaver.saveAs(blob, 'file.pdf');
});
下载文件的争议是:
[object Object]
这里有什么问题?为什么二进制数据没有保存到文件?
答案 0 :(得分:6)
我能够创建一个可行的要点(不使用FileSaver),如下所示:
axios.get("http://my-server:8080/reports/my-sample-report/",
{
responseType: 'arraybuffer',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/pdf'
}
})
.then((response) => {
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'file.pdf'); //or any other extension
document.body.appendChild(link);
link.click();
})
.catch((error) => console.log(error));
希望它有所帮助。
干杯!
答案 1 :(得分:0)
看起来response.data只是一个常规对象。 Blob接受他们的第一个参数“ArrayBuffer,ArrayBufferView,Blob或DOMString对象的数组。”
尝试将其包装在JSON.stringify
中const blob = new Blob([JSON.stringify(response.data)]
然后它将满足DOMString要求。