我如何 POST 一个文件从 S3 作为 FormData 到另一个 API?
How do I POST a file from S3 as FormData to another API?
我有一个 node.js Lambda 函数可以从 S3 存储桶下载 .docx
文件。
const object = await s3.getObject({
Bucket: bucket,
Key: templateName,
}).promise();
return object.Body;
然后我想获取此文件,并使用 axios post 将其上传到另一个 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;
其中 returns 一个包含两个空白页的 PDF 文档。
我的问题是,如何正确 post 和 FormData 内存文件数据?我只是错过了一些明显的东西吗?
我已经从 S3 手动下载文档并使用 Postman 将其发送到 Gotenberg API 并且工作正常。我不认为源文件有什么问题; 似乎 是我用代码发送文档的方式。
我尝试了几种不同的方法来使用表单数据进行 axios 调用,但无法让它不生成空白页。
我的问题不好。
问题是 axios 需要被告知 return 数据作为流。然后将结果转换为缓冲区修复了问题:
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);
我有一个 node.js Lambda 函数可以从 S3 存储桶下载 .docx
文件。
const object = await s3.getObject({
Bucket: bucket,
Key: templateName,
}).promise();
return object.Body;
然后我想获取此文件,并使用 axios post 将其上传到另一个 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;
其中 returns 一个包含两个空白页的 PDF 文档。
我的问题是,如何正确 post 和 FormData 内存文件数据?我只是错过了一些明显的东西吗?
我已经从 S3 手动下载文档并使用 Postman 将其发送到 Gotenberg API 并且工作正常。我不认为源文件有什么问题; 似乎 是我用代码发送文档的方式。
我尝试了几种不同的方法来使用表单数据进行 axios 调用,但无法让它不生成空白页。
我的问题不好。
问题是 axios 需要被告知 return 数据作为流。然后将结果转换为缓冲区修复了问题:
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);