Не удается загрузить файл с помощью res.sendFile() от 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 изображение/png

Сб, 13 февраля 2016 г., 04:00:52 GMT Express устарел res.sendfile: вместо этого используйте res.sendFile в packages/custom/xx/server/routes/xx.js:32:13 Ошибка: ENOENT: нет такого файла или каталога, stat '/xx/assets/data/demo.png' при ошибке (собственный)

Но я могу получить доступ к этому файлу по ссылке: http://localhost:3000/xx/assets/data/demo.png

Я использую MAC OS X EI Captian 10.11.2. Моя версия MEAN.IO — 0.5.5.


person Michael.Chan    schedule 13.02.2016    source источник


Ответы (1)


Я нашел способ загрузить файл без res.sendFile(), вы можете использовать fs.createReadStream(файл) или res.download(файл), оба могут решить эту проблему.

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);
  });
person Michael.Chan    schedule 13.02.2016