从我读到的来看,他的应该能用。但是它只是下载一个空文档。所以我一定是对管道的处理不正确。
如果我把它传输到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
字符串
我做错了什么?
1条答案
按热度按时间zzwlnbp81#
更新:经过OP的进一步调查,结果发现
return
关键字是工作所必需的,因此我更新了我的答案以包括它。Fastify还支持发送这样的流:
字符串
所以你应该尝试这样做,而不是
doc.pipe(reply.raw);
,因为.raw
的使用,不推荐这样做:[...]使用
Reply.raw
函数的风险由您自己承担,因为您跳过了处理HTTP响应的所有Fastify逻辑。顺便说一句,你的原始代码对我来说很好,所以也许你应该尝试在一个新的环境中提取你的代码,看看你是否可以重现这一点。