Mah*_*zat 10 memorystream pdfkit node.js
我在我的节点服务器上使用pdfkit(https://github.com/devongovett/pdfkit),通常创建pdf文件,然后将它们上传到s3.问题是pdfkit示例将pdf文档管道传输到节点写入流,该文件将文件写入磁盘,我按照示例操作并正常工作,但我现在的要求是将pdf文档管道传输到内存流而不是保存它在磁盘上(我还是上传到s3).我已经遵循了一些节点内存流程序,但它们似乎都没有与我一起使用pdf管道,我只能将字符串写入内存流.所以我的问题是:如何将pdf套件输出传输到内存流(或类似的东西),然后将其作为上传到s3的对象读取?
var fsStream = fs.createWriteStream(outputPath + fileName);
doc.pipe(fsStream);
Run Code Online (Sandbox Code Playgroud)
提前致谢.
小智 6
2020 年的更新答案。没有必要引入新的内存流,因为“PDFDocument 实例是可读的节点流”。
您可以使用该get-stream
包来轻松地等待文档完成,然后再将结果传回给您的调用者。
https://www.npmjs.com/package/get-stream
const PDFDocument = require('pdfkit')
const getStream = require('get-stream')
const pdf = () => {
const doc = new PDFDocument()
doc.text('Hello, World!')
doc.end()
return await getStream.buffer(doc)
}
// Caller could do this:
const pdfBuffer = await pdf()
const pdfBase64string = pdfBuffer.toString('base64')
Run Code Online (Sandbox Code Playgroud)
如果您的需求不同,则不必返回缓冲区。get-stream 自述文件提供了其他示例。
无需使用中间内存流1 - 只需将 pdfkit 输出流直接通过管道传输到 HTTP 上传流即可。
根据我的经验,AWS SDK 在处理流方面是垃圾,所以我通常使用request。
var upload = request({
method: 'PUT',
url: 'https://bucket.s3.amazonaws.com/doc.pdf',
aws: { bucket: 'bucket', key: ..., secret: ... }
});
doc.pipe(upload);
Run Code Online (Sandbox Code Playgroud)
1 - 事实上,通常不希望使用内存流,因为这意味着将整个内容缓冲在 RAM 中,而这正是流应该避免的!
归档时间: |
|
查看次数: |
2761 次 |
最近记录: |