如何将文件从S3作为FormData发布到另一个API?

我有一个node.js Lambda函数,可以从S3存储桶中下载.docx文件。

const object = await s3.getObject({
    Bucket: bucket,Key: templateName,}).promise();

return object.Body;

然后我要获取此文件,并使用axios将其发布到另一个API,以将其转换为PDF(Gotenberg实例)。

但是,我一直返回两个空白页作为转换结果,这表明它发送的是一些数据,因为它是两页的Word文档。

我当前正在使用object.Body值(记录时为缓冲区<Buffer 50 4b 03 04 14 [...])。

然后,我正尝试将其放入对Gotenberg的POST请求中:

const formData = new FormData();
formData.append('files',object.Body,{ filename: 'suitability-purchase.docx' });

const response = await axios.post(`${documentConversionService}/convert/office`,formData,{
    headers: {
        ...formData.getHeaders()
    }
});

console.log('Conversion finished',response);
return response.data;

哪个会返回两个空白页面的PDF文档。

我的问题是,如何正确发布FormData用于内存中的文件数据?我只是想念一些明显的东西吗?

我已经从S3手动下载了文档,并使用Postman将其发送到Gotenberg API,并且工作正常。我认为原始文档没有任何问题; 似乎是我在代码中发送文档的方式。

我尝试了使用表单数据进行axios调用的不同方式的几种变体,但无法使其不生成空白页。

zchng 回答:如何将文件从S3作为FormData发布到另一个API?

我的问题很严重。

问题是需要告知axios将数据作为流返回。然后将结果转换为缓冲区可解决此问题:

const stb = require('@jorgeferrero/stream-to-buffer');

const response = await axios({
    url: `${documentConversionService}/convert/office`,method: 'post',headers: formData.getHeaders(),data: formData,responseType: 'stream',});

return await stb.streamToBuffer(response.data);
本文链接:https://www.f2er.com/3110484.html

大家都在问