我正在从第三方API中获取一个PDF报告,我想将该PDF直接上传到s3。当我这样做时,它会将PDF上传到s3,但由于某种原因,当我在s3中打开该PDF时,所有页面都是空白的。我做错什么了吗?我的代码如下。
var report = reportInfo.body;
const params = {
Key: 'report.pdf',
Body: report,
Bucket: process.env.S3_BUCKET_NAME,
ContentType: 'application/pdf',
};
s3.upload(params, (err, res) => {
if (err) {
console.log(err, 'err');
}
console.log(res, 'res');
});我将API的响应分配给report对象。响应的一部分如下所示:
‘%PDF-1.5\n% 2872/Filter/FlateDecode>>stream\nx��\�n$�\r�����~�0�@�&1���>x�6�f����PU�U�a���mf���V�D�yHQ�փ��~$gF7�?���_/�����/��[�?��=�Ѓv���F?u��ǿS3�d��k \n1 0 obj>>�$�&����e��G���0�1Go�@M��&�jҚ�YJ3�zmhz��0<�Q��n�۶�����i�\r5w�0�1���ѦO�5��SwM=�pm�����#f�>��q^g��j�J����}O�fi�xz&f�0�ǜ�^���yj���mm{�OM/B{z��%+��H�Ɣl4
我认为这是普通的PDF,我可以直接上传到s3。上传之前我需要做些什么吗??为什么它只上传空白页?
谢谢
发布于 2022-07-21 15:12:56
PDF文档应该以arraybuffer的形式获取。
const axios = require('axios');
const fetchAndUploadPDF = async () => {
try {
const pdf_document = await axios({
method: 'get',
url: 'url_of_the_report',
headers: {
accept: 'application/pdf',
},
responseType: 'arraybuffer',
});
await s3.upload({
Key: 'file_name',
Body: pdf_document.data,
Bucket: 'bucket_name',
ContentType: 'application/pdf',
ACL: 'public-read',
})
.promise();
console.log('PDF document successfully fetched and uploaded');
} catch (error) {
console.log('ERROR: ', error.stack);
throw(error);
}
};发布于 2020-12-23 21:21:15
这完全是关于编码,在您的场景中,文件是通过POST传递给aws的多部分文件(pdf)。
对于node.js编码或解码,您应该引用此文档。
另一个需要完成的配置是,必须正确配置API网关设置以支持二进制数据类型。
路径: AWS控制台-> API网关->设置->多部分/表单-数据

https://stackoverflow.com/questions/65430678
复制相似问题