为 pdf 文件创建读取流以上传到 s3 存储桶

Posted

技术标签:

【中文标题】为 pdf 文件创建读取流以上传到 s3 存储桶【英文标题】:Create a read stream for a pdf file to upload to s3 bucket 【发布时间】:2021-10-20 02:05:46 【问题描述】:

我有一项快速服务,它从我的前端获取一个 pdf 文件并将其保存到 s3 存储桶中。我在尝试获取文件并创建流时遇到问题,以便我可以将其传递给 s3 上传功能。我试图避免将文件写入光盘,所以我认为我不能使用fs.createReadStream(),但我似乎找不到其他方法来做到这一点..

router.post('/upload', upload.single('my-pdf'), async (req, res, next) 
   const file = req.file;
   
   // Needs a file path not an actual file
   const stream = fs.createReadStream(file);

   return s3.upload(file).promise();

任何有关如何解决此问题的帮助或建议将不胜感激。

【问题讨论】:

【参考方案1】:

假设req.file.<name_of_upload_field> 是一个保存文件内容的缓冲区,您可以通过

将其转换为可读流
var str = new stream.PassThrough();
str.end(req.file.<name_of_upload_field>);
return s3.upload(str).promise();

【讨论】:

以上是关于为 pdf 文件创建读取流以上传到 s3 存储桶的主要内容,如果未能解决你的问题,请参考以下文章

从内存流中读取存储的 PDF

将PDF内容写入S3

使用 go 将流文件上传到 AWS S3

获取s3对象元数据然后创建流

确定节点js中读取流的长度

为 AWS C# S3 SDK 使用内存流而不是文件流而不将完整文件写入 S3