NodeJS 如何在前端应用程序上使用axios下载响应类型文档?

2izufjch  于 2023-05-22  发布在  Node.js
关注(0)|答案(1)|浏览(352)

我试图从API(docx,odt)获取文件并将其保存到下载(这是前端应用程序)。我尝试了 Postman '保存响应文件',它的工作正常,文件保存为我的预期。

在axios中我应该怎么做才能下载和响应?
响应标头:

content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document,
content-disposition: attachment; filename="output_document.odt"
function getAllData() {
        let documentJSON = JSON.stringify(form);
        axios.post("http://testapi/document",
        {
            headers: {
                'Content-Type': 'application/json',
                'Accept': 'application/vnd.openxmlformats- 
                officedocument.wordprocessingml.document'
            },
            data: documentJSON
        })
        .then((response) => {
            console.log(response);
            const url = window.URL.createObjectURL(new 
            Blob([response.data], { type: 
            'application/vnd.openxmlformats- 
            officedocument.wordprocessingml.document' }));
            const link = document.createElement('a');
            link.href = url;
            link.setAttribute('download', 'file.odt'); 
            document.body.appendChild(link);
            link.click();
        })
        .catch((error) => console.log(error))

我真的不明白响应是怎么回事,所以我尝试了不同的东西,例如从它创建blob(这显然是不正确的)…

0x6upsns

0x6upsns1#

所以,我只是使用了axios post请求的错误sintax,它既没有应用请求头和主体,也没有应用响应类型:正确的Sintax是:

axios.post("http://176.32.33.67:8000/api/document/file",
    documentJSON,
    {
        responseType: 'arraybuffer',
        headers: {
            'Content-Type': 'application/json',
            //'Accept': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
        }
    })
    .then((response) => {
        console.log(response);
        //deal with response
    }

相关问题