我在Express.js中有一段代码,如下所示:
var pdf = printer.createPdfKitDocument(docDefinition);
pdf.pipe(fs.createWriteStream(filePath));
pdf.end();
// Send the pdf to the client.
var file = fs.createReadStream(filePath);
var stat = fs.statSync(filePath);
res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=' + fileName);
file.pipe(res);
我可以看到这个文件实际上是在服务器中创建的,但是当我用createReadStream
准备它时,我得到它的大小是0。所以有些东西被破坏了。你知道问题可能是什么以及如何解决它吗?
发布于 2018-06-10 05:58:18
文件没有损坏,您正在将代码视为同步的,但却是异步的。
您必须等待文件完全写入,然后才能读取它。无论如何,您不需要将其写入文件来发送内容,如果您不需要文件在磁盘上持久化,您可以直接通过管道将其传输到res
。
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=' + fileName);
const pdf = printer.createPdfKitDocument(docDefinition);
pdf.pipe(res);
如果要将其保存到文件中,然后进行读取,则可以执行以下操作:
const write = fs.createWriteStream('./basics.pdf');
pdfDoc.pipe(write);
write.on('finish', () => {
fs.createReadStream('./basics.pdf')
.pipe(res); //
});
pdfDoc.end();
https://stackoverflow.com/questions/50778855
复制相似问题