MEAN Stack 无法使用 res.sendFile() 下载文件

Can't download file using res.sendFile() by MEAN Stack

这是我的路由文件xx.js

app.route('/api/xx/download')
  .get(function (req, res) {
    var mimetype = mime.lookup('/xx/assets/data/demo.png');

    res.setHeader('Content-disposition', 'attachment; filename=demo.png');
    console.log('mimetype', mimetype);
    res.setHeader('Content-type', mimetype);

    res.sendFile('/xx/assets/data/demo.png')
  });

下面是我从终端得到的:

mimetype image/png

Sat, 13 Feb 2016 04:00:52 GMT express deprecated res.sendfile: Use res.sendFile instead at packages/custom/xx/server/routes/xx.js:32:13 Error: ENOENT: no such file or directory, stat '/xx/assets/data/demo.png' at Error (native)

但我可以通过 link 访问此文件:http://localhost:3000/xx/assets/data/demo.png

我正在使用 MAC OS X EI Captian 10.11.2 我的 MEAN.IO 版本是 0.5.5

我找到了一种不用res.sendFile()下载文件的方法,你可以使用fs.createReadStream(file)或res.download(file),两者都可以解决这个问题。

fs.createReadStream(文件):

var mime = require('mime');
var fs = require('fs');
var path = require('path');

app.route('/api/xx/download').get(function (req, res) {
    var file = __dirname + '/../../public/assets/data/demo.png';
    var filename = path.basename(file);

    var mimetype = mime.lookup(file);

    res.setHeader('Content-disposition', 'attachment; filename=' + filename);
    console.log('mimetype', mimetype);
    res.setHeader('Content-type', mimetype);

    var filestream = fs.createReadStream(file);
    filestream.pipe(res);
  });

res.download(文件):

使用 Express res.download 让生活更轻松

app.route('/api/xx/download')
  .get(function (req, res) {
    var file = __dirname + '/../../public/assets/data/demo.png';
    res.download(file);
  });