首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将文件从S3作为FormData发布到另一个API?

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

Stack Overflow用户
提问于 2019-11-13 11:34:48
回答 1查看 1.6K关注 0票数 3

我有一个node.js Lambda函数,它从一个S3桶下载一个.docx文件。

代码语言:javascript
复制
const object = await s3.getObject({
    Bucket: bucket,
    Key: templateName,
}).promise();

return object.Body;

然后,我想接受这个文件,并使用axios将其发布到另一个API中,将其转换为PDF (一个戈滕贝格实例)。

然而,作为转换结果,我一直得到两个空白页,这意味着它发送了一些数据,因为它是一个两页的Word文档。

我目前使用的是object.Body值(在记录时,它是一个缓冲区:<Buffer 50 4b 03 04 14 [...])。

然后,我试着把它写进对Gotenberg的帖子请求:

代码语言:javascript
复制
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,并且运行良好。我不认为源文档有什么问题;这似乎是我在代码中发送文档的方式。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-14 17:42:21

对我来说是个坏问题。

问题是,需要告诉axios将数据作为流返回。然后将结果转换为缓冲区修复了这个问题:

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58836211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档