将js,pipeline pdfkit节点存储到内存stream中

我在我的节点服务器上使用pdfkit( https://github.com/devongovett/pdfkit ),通常是创buildpdf文件,然后上传到s3。 问题是pdfkit示例将pdf文档转换为节点写入stream,将文件写入磁盘,我遵循示例并正常工作,但是现在我的要求是将pdf文档传输到内存stream而不是保存它在磁盘上(我正在上传到s3)。 我已经遵循了一些节点内存stream程序,但是他们中的任何一个似乎都不能和我一起使用pdfpipe道,我只能写string到内存stream。 所以我的问题是:如何pipepdf输出到一个内存stream(或类似的东西),然后阅读它作为一个对象上传到S3?

var fsStream = fs.createWriteStream(outputPath + fileName); doc.pipe(fsStream); 

提前致谢。

       

网上收集的解决方案 "将js,pipeline pdfkit节点存储到内存stream中"

不需要使用中间内存stream1 – 只需将pdfkit输出stream直接input到HTTP上传stream中即可。

根据我的经验,当开始使用stream时,AWS SDK是垃圾,所以我通常使用请求 。

 var upload = request({ method: 'PUT', url: 'https://bucket.s3.amazonaws.com/doc.pdf', aws: { bucket: 'bucket', key: ..., secret: ... } }); doc.pipe(upload); 

1 – 事实上,使用内存stream通常是不可取的,因为这意味着缓冲整个内存,这正是stream应该避免的!

你可以尝试这样的事情,并在end事件中上传到S3。

 var doc = new pdfkit(); var MemoryStream = require('memorystream'); var memStream = new MemoryStream(null, { readable : false }); doc.pipe(memStream); doc.on('end', function () { var buffer = Buffer.concat(memStream.queue); awsservice.putS3Object(buffer, fileName, fileType, folder).then(function () { }, reject); })