将 pdfkit PDF 通过管道传送到 Fastify

问题描述 投票:0回答:1

从我读到的内容来看,他的应该有效。但它只是下载一个空文档。所以我一定是错误地处理了管道。

如果我将其通过管道传输到

fs.createWriteStream
,效果很好...

import PDFDocument from 'pdfkit'

const downloadPdfRoute = async (app) => {
    app.get('/download/:filename', async (req, reply) => {

        const doc = new PDFDocument()

        reply.type('application/pdf')
        reply.header(
            'content-disposition',
            `attachment; filename="${req.params.filename}"`
        )

        doc.pipe(reply.raw)

        doc.text('Hello, this is your PDF content.')

        doc.end()
    })
}

export default downloadPdfRoute

我做错了什么?

node.js pdfkit fastify
1个回答
1
投票

更新:经过OP的进一步调查,结果发现需要

return
关键字才能起作用,因此我更新了我的答案以包含它。


Fastify 还支持发送stream,如下所示:

return reply.send(doc);

所以你应该尝试这样做,而不是

doc.pipe(reply.raw);
,这是不推荐,因为
.raw
的用法:

[...] 使用

Reply.raw
函数的风险由您自行承担,因为您跳过了处理 HTTP 响应的所有 Fastify 逻辑。

顺便说一句,你的原始代码对我来说工作得很好,所以也许你应该尝试在一个新的环境中提取你的代码,看看是否可以重现它。

© www.soinside.com 2019 - 2024. All rights reserved.