使用Axios下载二进制文件

时间:2018-02-28 23:15:59

标签: javascript axios filesaver.js

例如,下载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]

这里有什么问题?为什么二进制数据没有保存到文件?

2 个答案:

答案 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要求。