Ответ 1
Вы можете использовать функцию http.request()
, чтобы отправить запрос на ваш externalURL
, а затем pipe()
ответ обратно на res
. Использование pipe()
будет передавать файл через ваш сервер в браузер, но в любой момент он не сохранит его на диске. Если вы хотите, чтобы файл также был загружен (вместо того, чтобы отображаться в браузере), вам нужно будет установить заголовок content-disposition
.
Вот пример сервера, который будет "загружать" логотип google. Это просто используется стандартный модуль http
и не выражается, но он должен работать в основном таким же образом:
var http = require('http');
http.createServer(function(req, res) {
var externalReq = http.request({
hostname: "www.google.com",
path: "/images/srpr/logo11w.png"
}, function(externalRes) {
res.setHeader("content-disposition", "attachment; filename=logo.png");
externalRes.pipe(res);
});
externalReq.end();
}).listen(8080);
Если вы хотите использовать модуль request
, это еще проще:
var http = require('http'),
request = require('request');
http.createServer(function(req, res) {
res.setHeader("content-disposition", "attachment; filename=logo.png");
request('http://google.com/images/srpr/logo11w.png').pipe(res);
}).listen(8080);
Примечание. Имя файла, сохраненного браузером, устанавливается filename=
частью заголовка content-disposition
; в этом случае я устанавливаю его на logo.png
.