在浏览器中用Sails显示pdf文件

时间:2019-08-14 00:11:36

标签: html node.js sails.js

我在目录中有一些文档,我想在浏览器中显示一个文档,我将文档的路径保存在一个表中,我可以从该表中读取该路径并下载该文档,但是我无法了解如何在浏览器中显示文件。 我正在使用以下代码发送文件:

  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文件,最好不要重新加载所有页面。

2 个答案:

答案 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文件。

相关问题