Express:res.sendFile无法触发文件下载,但没有错误

时间:2016-08-18 04:59:49

标签: angularjs node.js express node-pdfkit

我试图找出为什么我的应用程序的前端没有收到Express似乎认为它正在发送的文件。

该应用的预期行为是用户点击"生成PDF"按钮位于前端的角形动力形式上,然后让后端生成PDF并在创建完成后将其发送给用户。我可以确认PDF已成功生成,其他所有内容都按预期工作,但res.sendFile似乎无法在前端触发文件下载。

以下是我用来触发下载的代码:

var labelStream = fs.createWriteStream('labels/' + transaction.object_id + '.pdf');

request(transaction.label_url).pipe(rawLabelStream);
rawLabelStream.on('finish', function () {
    var doc = new PDFDocument;
    doc.text(req.body.sku, 115, 315, {"width": "150", "align": "center"});
    doc.image('rawlabelpng/' + transaction.object_id + '.png', 325, 75, {"width": "250"});
    doc.moveDown();
    doc.text (req.body.note, 100, 645, {"align": "center"});
    doc.pipe(labelStream);
    doc.end();

    labelStream.on('finish', function () {
        console.log("PDF has been generated!");
        res.sendFile('/absPath/to/files/' + transaction.object_id + '.pdf', {"headers":{
            "content-type": "application/pdf",
            "content-disposition": "attachment"
        }}, function (err){
            if (err) {
                console.log(err);
                res.status(err.status).end();
            }
            else {
                console.log('Sent: ' + transaction.object_id + '.pdf');
            }
    });
});

当我测试上面的代码时,我得到了"已发送:xxxxxxxxx.pdf"登录我的控制台,这表明没有明显的错误被绊倒。 Express似乎认为文件已成功发送,但下载永远不会在浏览器中触发。遗憾的是,使用DEBUG = express:*标志运行nodemon并没有向我提供有关res.sendFile正在做什么的任何额外信息。

之前,我遇到了关于绝对文件的TypeError,所以我从服务器的根目录开始输入文件的绝对路径。自从那次改变以来,我还没有看到Express的任何错误,但它似乎仍然没有正常工作。我希望这是配置绝对路径的正确方法,如果路径不正确并且实际上没有导致文件,我认为Express会发送ENOENT错误。 ..对吧?

之前有没有人碰到这样的事情?

如果有帮助,我尝试用res.download替换res.sendFile而不改变行为。

0 个答案:

没有答案