2016-10-05 2 views
0

Я хочу служить удаленного HTML, поэтому я:Экспресс и запрос сделать Chrome скачать файл вместо того, чтобы служить ему

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

var app = express(); 

app.get('/', function (req, res) { 
    res.header('Content-Type', 'text/html'); 

    request('https://www.googleapis.com/download/storage/v1/...o/html%2Findex.html?generation=1475649807769000&alt=media') 
     .pipe(res); 
}); 

app.listen(3000, function() { 
    console.log('Example app listening on port 3000!'); 
}); 
  1. загрузив его с помощью Request модуля.
  2. Трубопроводы для выражения 'res.

В Chrome, вместо просмотра HTML, Chrome загружает его. Как так?

enter image description here

+0

Вероятно потому, что вы конвейеру заголовки ответа от запроса непосредственно в браузер, и эти заголовки содержат либо заголовок 'content-disposition', и/или они перезаписывают ваш заголовок' content-type'. – robertklep

ответ

2

Если вы обжигающе результат запроса HTTP непосредственно на ваш ответ, любые заголовки, которые получают установленные на удаленном сервере будут скопированы дословно, включая заголовки, которые могут заставить загрузку, как content-disposition.

Вы уже придумали хорошее решение самостоятельно:

request 
    .get(URL) 
    .on('response', (response) => { 
     delete response.headers['content-disposition'] 
    }) 
    .pipe(res); 
0

Вы должны добавить этот атрибут в ответ заголовка:

res.header('Content-disposition', 'attachment; filename= "' + encodeURI(file_name) +'"'); 
Смежные вопросы