我正在尝试使用已经存在于模拟测试数据下的pdf,在没有提示的情况下下载pdf。我可以使用下面的代码完成上述任务。但是当我尝试打开下载的pdf时,我收到“无法加载pdf文档”我在这里缺少什么。请帮助。
fs.readFile('./src/test-data/service/print/notes.pdf', function(error, content) {
if (error) {
res.writeHead(500);
res.end();
}
else {
res.writeHead(200, {
'Content-Type': 'application/pdf',
'Content-Disposition': 'attachment; filename=notes.pdf'
});
res.end(content, 'utf-8');
}
});
答案 0 :(得分:1)
你必须使用res.download
function fileExist(fullpath) {
try {
return fs.statSync(fullpath).isFile();
} catch (e) {
return false;
}
}
var name = 'notes.pdf';
var filePath = './src/test-data/service/print/' + name;
if (!Files.Exist(filePath)) {
console.log("file does't exist");
} else {
res.download(filePath, name, function(err) {
fs.unlink(filePath);
});
}
如果您想在下载后保留文件,请替换
行res.download(filePath, name, function(err) {
fs.unlink(filePath);
});
通过
res.download(filePath, name);
角度应用程序中的使用$ window.open(url,'_ self');
答案 1 :(得分:0)
这很完美。
var file = fs.createReadStream('./src/test-data/service/print/notes.pdf');
var stat = fs.statSync('./src/test-data/service/print/notes.pdf');
res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Disposition', 'attachment; filename=agreement.pdf');
file.pipe(res);
答案 2 :(得分:0)
如果上述解决方案不能解决您的问题,并且您使用的是 nginx + express,则问题可能出在 nginx 缓冲响应上。您可以使用以下方法禁用它:
proxy_buffering off;