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

How to download response type document with axios on front-end application?

提问人:Grigory Voevodin 提问时间:5/20/2023 最后编辑:Grigory Voevodin 更新时间:5/22/2023 访问量:321

问:

我正在尝试从 api(docx、odt)获取文件并将其保存到下载中(这是前端应用程序)。我尝试过邮递员“将响应保存到文件”,它工作正常,文件按我预期保存。saving file with postman works ok我应该在 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(这显然是不正确的)......

节点.js axios blob 数组缓冲区 odt

评论


答:

0赞 Grigory Voevodin 5/22/2023 #1

所以,我只是使用了 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
    }