2015-05-26 5 views
3

Я хочу заставить браузер загружать файл из внешнего хранилища с учетом URL-адреса. Я реализовал этот экспресс-контроллер после действия:node express content-disposition

var download = function(req, res) { 
    request(req.body.url).on('response', function(response) { 
     res.set({ 
      'Content-Disposition': 'attachment; filename=' + req.body.filename, 
      'Content-Type': response.headers['content-type'] 
     }); 
    }) 
    .pipe(res); 
}; 

Я не знаю, почему браузер всегда получает «инлайн» вместо «прикрепления», избегая меня, чтобы загрузить файл.

В этом случае я использую экспресс и запрос, сервер размещен на Heroku, а сервером, на котором размещаются файлы, является FilePicker.

+0

FWIW, ваш код будет делать неправильные вещи в случае, если имя файла содержит пробелы, определенные ограничители, или не-ASCII символов. См. RFC 6266. –

ответ

3

Я ищу вокруг для того же самого. Express' documentation показывает очень простой вспомогательный метод прямо из коробки:

var express = require('express'); 
var app = express(); 

app.get('/download', function(req, res) { 
    res.download('/path/to/your_file.pdf'); 
});