【问题标题】:Download returning empty file下载返回空文件
【发布时间】:2017-11-15 15:21:57
【问题描述】:

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

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;

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

谢谢!

【问题讨论】:

    标签: node.js express pdfkit


    【解决方案1】:

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

    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;
    

    【讨论】:

    • 完美!事实上,我不需要物理文件,所以只需将文件传递给响应就足够了!非常感谢!
    【解决方案2】:

    如果你需要物理文件和下载响应(像我一样),你可以等待流的close 事件:

    let stream = fs.createWriteStream(filename);
    doc.pipe(stream);
    // Do whatever you need with doc
    doc.end();
    stream.on("close", () => {
        res.download(filename, 'rifas.pdf', function(err){
            if(!err){
                fs.unlink(filename);
            }
        })
    });
    

    【讨论】:

      猜你喜欢
      • 2016-06-11
      • 1970-01-01
      • 2013-06-03
      • 2020-03-18
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 2018-07-04
      • 2013-09-02
      相关资源
      最近更新 更多