使用nodejs阅读S3 url后,无法以正确格式写入文件

kyxcudwk  于 2022-12-12  发布在  Node.js
关注(0)|答案(1)|浏览(122)

我试图写Excel文件后,从S3桶的网址阅读与axios的帮助下,数据被写入文件,但它不是可读的格式。我想写的数据在适当的excel file format,它被上传。
下面是我的代码:

axios({
            url: 'https://example.com/1666960010753_Me%20Data.xlsx',
            method: 'GET',
            responseType: 'blob',
        }).then((response) => {

            const ostream = fs.createWriteStream(`./${filename}`);
            ostream.write(response.data);
           
        });

有人让我知道我做错了什么。

pn9klfpd

pn9klfpd1#

首先,您的Excel数据表现在是公开的。不知道这是不是故意的,如果不是,请从代码示例中删除它。

现在到了这个问题。
您应该使用'arraybuffer'做为回应类型,而不是'blob'。This answer explains it really well why that is
同样,你应该结束你的流。这表明流已经结束,没有数据应该并且可以被再次写入流。
数组缓冲区是一个二进制缓冲区,当你知道你将要得到什么数据时,最好的做法是为一个文件设置编码。
对于您的代码,它看起来如下所示:

axios({
  url: 'https://<s3-domain>/<path-to-excel-file>.xlsx',
  method: 'GET',
  responseType: 'arraybuffer',
}).then((response) => {
  const ostream = fs.createWriteStream(`./${filename}`, 'binary');
  ostream.pipe(response.data);
  ostream.end();
});

相关问题