我试图找出为什么我的应用程序的前端没有收到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而不改变行为。