我在目录中有一些文档,我想在浏览器中显示一个文档,我将文档的路径保存在一个表中,我可以从该表中读取该路径并下载该文档,但是我无法了解如何在浏览器中显示文件。 我正在使用以下代码发送文件:
loadDocument: async function (req,res){
var SkipperDisk = require('skipper-disk');
var fileAdapter = SkipperDisk(/* optional opts */);
var fd = await Documents.find(
{
where: {id:'1'},
select: ['uploadFileFd']
}
).limit(1);
let uploadFileFd = fd[0]["uploadFileFd"];
var fileStream = fileAdapter.read(uploadFileFd);
fileStream.on('error', function (err){
return res.serverError(err);
});
res.contentType("application/pdf");
res.set("Content-disposition", "attachment; filename=" + "file"+ fd[0]["id"]+".pdf");
fileStream.pipe(res);
},
我想调用该函数并在浏览器中加载pdf文件,最好不要重新加载所有页面。
答案 0 :(得分:0)
由于要发送的Content-disposition: attachment
标头,客户端浏览器将下载pdf而不尝试打开内置的PDF查看器(即Chrome)-尝试使用 inline 。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition
res.setHeader('Content-type', 'application/pdf');
res.setHeader('Content-disposition', 'inline; filename="file' + fd[0]["id"] + '.pdf"');
答案 1 :(得分:0)
最后,我找到了解决问题的方法。 首先,我必须找到一种方法来提供文件所在的静态文件夹,我找到了答案here。
然后,我修改代码以发送文件的网址,如下所示:
var os = require('os');
const dir = `${os.homedir()}/folder`;
loadDocument: async function (req,res){
var SkipperDisk = require('skipper-disk');
var fileAdapter = SkipperDisk(/* optional opts */);
var fd = await Documents.find(
{
where: {id:'1'},
select: ['uploadFileFd']
}
).limit(1);
let uploadFileFd = fd[0]["uploadFileFd"];
var fileStream = fileAdapter.read(uploadFileFd);
fileStream.on('error', function (err){
return res.serverError(err);
});
let url = 'http://localhost:1337'+ fileStream.path.substring(dir.length);
return res.view('pages/documents', {
user: req.user,
url: url,
});
},
` 现在,感谢所有尝试提供帮助的人,我可以在嵌入到自己页面中的浏览器中显示pdf文件。