node.js - 下载返回空文件

标签 node.js express pdfkit

我正在构建一个node.js+express应用程序,用户将在其中输入一些数据,然后生成一个带有pdfkit的PDF。并且文件被发送给用户。我能够成功生成文件,问题是当我下载生成的文件时,它是空的。我什至无法打开 PDF,阅读器(预览版、macOS 中的 native 阅读器)显示该文件为空。我正在使用以下代码:

var express = require('express');
var router = express.Router();
var guid = require('guid');
var PDFDocument = require('pdfkit');
var fs = require('fs');

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

router.post('/criar', function(req, res, next) {
    var filename = guid.raw()+'.pdf';
    var doc = new PDFDocument();
    doc.pipe(fs.createWriteStream(filename));

    doc.font('fonts/UbuntuMono-R.ttf')
        .fontSize(25)
        .text('Some text with an embedded font!', 100, 100);

    doc.end();

    res.download(filename, 'rifas.pdf', function(err){
        if(!err){
            fs.unlink(filename);
        }
    })
});

module.exports = router;

您知道为什么我下载的文件是空的,而在服务器中它们是正确生成的吗?

谢谢!

最佳答案

您真的需要物理文件吗?如果没有,那么您可以直接流式传输到客户端:

var express = require('express');
var router = express.Router();
var PDFDocument = require('pdfkit');
var fs = require('fs');

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

router.post('/criar', function(req, res, next) {
    var doc = new PDFDocument();
    doc.pipe(res);

    doc.font('fonts/UbuntuMono-R.ttf')
        .fontSize(25)
        .text('Some text with an embedded font!', 100, 100);

    doc.end();

});

module.exports = router;

关于node.js - 下载返回空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47311108/

相关文章:

javascript - Socket.io 与 Node.js

node.js - 如何执行 "sudo nvm"?

MySQL 从多个表中选择并创建一个新表

javascript - passportjs LocalStrategy 是否允许比默认用户名和密码更多的参数?

swift - PDFKIT iOS 11,在 PDFDocument 中保存注释页面

android - 从 nodejs 运行 gradlew

javascript - 我不明白为什么我的快速路由在发送后遇到 'can' t set headers'

node.js - 需要 Node.js/Express.js 中间件没有方法 '...'

ios - 如何消除 PDFView "page shadow"?

ruby-on-rails-3 - wkhtmltopdf(带有 pdfkit)安装在 Ubuntu 上,但不能在 Rails 中工作