【问题标题】:Uploading PDF obtained from API directly to s3 in NodeJS将API获取的PDF直接上传到NodeJS中的s3
【发布时间】:2021-04-02 10:54:26
【问题描述】:

我正在从第三方 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%����\n1 0 obj>流\nx��\�n$�\r�����~�0 �@�&1���>x�6�f����PU�U�a���mf����V�D�yHQ�փ��~$gF7�?��_/�� ���/��[�?��=�Ѓv��????�F?u��ǿS3�d��k��:O�����X�k���2�k ��\t˿?�������XY�Ի��Ti-3�y��y�u3�Q~���E?�g����攻f_I4��'>>> �$�&����e��G���0�1Go�@M��&�jҚ�YJ3�zmhz��0��q^g��j�J����}O�fi �xz&f�0�ǜ�^���yj���mm{�OM/B{z��%+��H�Ɣl4

我认为这是纯 PDF,我可以直接将其上传到 s3。在上传之前我需要做些什么吗?为什么只上传空白页?

谢谢

【问题讨论】:

  • 首先,请您删除不可读的上下文。否则社区会反对你的问题。
  • reportInfo.body 来自哪里?它应该是缓冲区、blob 或流。
  • 它来自 REST API。您对此有何建议?

标签: node.js pdf amazon-s3


【解决方案1】:

这一切都与编码有关,在您的场景中,文件是通过 POST 到 url 传递给 aws 的多部分文件 (pdf)。

  • 服务器得到一个带有这个字节的文件 -> 0010(这不会是 解释正确,因为标准字节有 8 位)
  • 所以,我们用 base 64 对其进行编码 -> 不管结果如何,解码它 得到一个标准字节 - > 0000 0010 (现在这是一个标准字节和 由 aws 正确解释)

对于node.js的编码或解码,你应该参考这个doc。

另一个需要完成的配置,API 网关设置必须正确配置以支持二进制数据类型。

路径: AWS 控制台 --> API Gateway --> 设置 --> multipart/form-data

【讨论】:

  • 那么,我应该如何处理这些数据以使其正确?将其编码为base 64,然后发送到s3?您可以输入一个小的 sn-p 作为建议吗? Tnx :D
猜你喜欢
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 2022-11-26
  • 1970-01-01
  • 2019-04-05
  • 2016-03-19
  • 1970-01-01
  • 2017-06-19
相关资源
最近更新 更多