在sails js中下载文件

时间:2017-05-11 07:46:35

标签: node.js sails.js

我是sailsjs的新手我的问题是文件没有直接下载。它存储在sailsjs应用程序文件夹like this picture 。我尝试了几个例子但文件没有下载。所以请帮助我如何过来这个问题。如果有任何柱塞它会对我充分使用。谢谢。

controller.js

  downlodrentreceiptpdf:function(req,res){

      var rentData = req.param('data');

  sails.log('<<<<<<<-------------------UtilityController().downlodRentReceiptPdf-----------inside pdf method------>>>>>>');




var resultList = [];
var date = new Date("10/14/2015");
var endDate = new Date("03/13/2016");


  sails.log('<<<<<<<-------------------UtilityController().downlodRentReceiptPdf-----------Testing 2------>>>>>>');


var months = endDate.getMonth() - date.getMonth()
       + (12 * (endDate.getFullYear() - date.getFullYear()));





       sails.log("months--->"+months)

  var template="";



  template = template+ '<style>'+
  'html, body {'+
    'height: 100%;'+
  '}'+
  '#tableContainer-1 {'+
    'height: 100%;'+
    'width: 100%;'+
    'display: table;'+
  '}'+
  '#tableContainer-2 {'+
    'vertical-align: middle;'+
    'display: table-cell;'+
    'height: 100%;'+
  '}'+
  '#myTable > td,'+
  '#myTable > th{'+
    'margin: 0 auto;'+
   'border:1px solid black;'+
    '}'+
  '#myTable{'+
  'margin: 0 auto;'+
     '}'+
  '#tableth {'+
    'text-align:center;'+
'}'+
'</style>'+
'<div id=\"tableContainer-1\">'+
  '<div id=\"tableContainer-2\">'+
    '<table id=\"myTable\" style=\"border:1px solid black;border-collapse:collapse;\">'+
  '<tr >'+
     '<th colspan=\"2\" style=\"border:1px solid black;\">RENT RECEIPT</th>'+
   '</tr>'+
  '<tr border=\"0\" >'+
    '<td style=\"border:1px solid black;\">Tenant’s Name  :</td>'+
    '<td style=\"border:1px solid black;\"> '+ rentData.name +' (Employee ID: '+rentData.employee+'  ) </td>'+
  '</tr>'+
  '<tr border=\"0\">'+
    '<td style=\"border:1px solid black;\">Property Address  :</td>'+
    '<td style=\"border:1px solid black;\">'+rentData.address+
 '</td>'+
  '</tr>'+
  '<tr border=\"0\">'+
    '<td style=\"border:1px solid black;\">Rent Amount  :</td>'+
    '<td style=\"border:1px solid black;\"> '+rentData.rent+' </td>'+
  '</tr>'+
  '<tr border=\"0\">'+
    '<td style=\"border:1px solid black;\">Period From  :</td>'+
    '<td style=\"border:1px solid black;\">'+ rentData.pfrom +'</td>'+
  '</tr>'+
  '<tr border=\"0\">'+
    '<td style=\"border:1px solid black;\">Period To  :</td>'+
    '<td style=\"border:1px solid black;\">'+ rentData.pto +'</td>'+
  '</tr>'+
    '</table>'+
  '</div>'+
'</div>'



//sails.log("html template------->"+template);



 var options = {
       "height": "5.5in",
       "width": "8in",
        "format": 'Letter',
        // Page options
        "border": {
    "top": "2in",            // default is 0, units: mm, cm, in, px
    "right": "1in",
    "bottom": "2in",
    "left": "1.5in",
    "type": "pdf",             // allowed file types: png, jpeg, pdf 
    "quality": "75",
  "directory": "/tmp"
  },};


    htmltopdf.create(template, options).toFile('rentreceipt.pdf', function (err, file) {

        if (err) {
            return next(err);
        } else {
            console.log(file);
            res.json({filepath: file.filename}); 
        }
    });



}

上面的代码是我的controller.js文件,它没有下载文件。但是它将文件存储在我的sails应用程序中,如上图所示。

1 个答案:

答案 0 :(得分:0)

如果要使用此控制器直接下载文件。您可以将skipper-disk软件包与sails https://www.npmjs.com/package/skipper-disk一起使用。

然后而不是

htmltopdf.create(template, options).toFile('rentreceipt.pdf', function (err, file) {
  if (err) {
    return next(err);
  } else {
    console.log(file);
    res.json({filepath: file.filename}); 
  }
});

您可以快速安装skipper-disk

npm install skipper-disk --save

然后将您的代码更改为此

htmltopdf.create(template, options).toFile('rentreceipt.pdf', function (err, file) {
 if (err) {
   return next(err);
 } else {
   console.log(file);

   // including skipper-disk
   var SkipperDisk = require('skipper-disk');
   var fileAdapter = SkipperDisk();

   // using the fileadapter to pipe the response
   fileAdapter.read(file.filename).on('error', function (err) {
     return next(err);
   }).pipe(res);
  }
});