如何使用NodeJs POST请求下载分块文件?

时间:2020-07-03 17:33:56

标签: node.js axios

我在这里遇到问题。

让我们从拥有API开始,此API返回带有下一个标头的数据:

Content-Type image/png
Transfer-Encoding chunked
Connection keep-alive

只有文件所在的响应正文。

当我尝试将此正文数据写入文件时-它总是坏了。我的意思是我已经有了二进制数据,他的mime,body.length与原始文件大小匹配,但是保存该图像后无法在任何查看器中打开该图像。

我在做什么:

public userFile(req, res: Response) {
    const data = {
        fileId: parseInt(req.body.fileId),
    };

    let params = {
        headers: {
            'Authorization': keys.token,
        },
    };


    axios.post('/api/getfile/', data, params,)
        .then((response: AxiosResponse) => {
            const fs = require('fs');
            const dir = require('path').resolve(__dirname + '../../../files/storage');
          
            const ext = {
                'image/png': '.png'
            };

            fs.writeFile(dir + '/' + img + ext[response.headers['content-type']], response.data, (er) => {
                res.send(response.data);
            });
        })
        .catch((err) => {
            logger.error("AXIOS ERROR: ", err)
        })
}

但是!当我通过邮递员获得此文件时...就在这里! 所以,我需要您的帮助-我做错了什么?

1 个答案:

答案 0 :(得分:1)

您必须在参数中明确声明它是哪种响应类型

responseType: 'stream'

然后使用管道将流保存到文件

response.data.pipe(fs.createWriteStream("/dir/xyz.png"))