2014-09-27 1 views
0

У меня есть немного кода:Чтение удаленного файла и вывод в браузер. Работайте с текстом и html. Не работайте с изображениями. NodeJs

var target = 'http://i.stack.imgur.com/5CXfX.png'; //For example, a .PNG image 

//Testing with text/html and text/plain and image/png 
res.setHeader('Content-Type', 'image/png');//res is response of current request 

http.get(url.parse(target), function(response) { 

    var data; 

    response.on('data', function(chunk) { 

     if(!data) data = chunk; else data += chunk; 

    }).on('end', function() { 

     res.send(data); 

    }); 

}); 

Что извлекает данные из target, а также отображать его в браузере, зависит от Content-Type я поставил. На данный момент он очень хорошо работает в извлечении документа и отображает его как HTML или обычный текст. Однако при изменении цели на прямой URL изображения и изменении Content-Type в соответствующий тип файла (например, image/png или image/jpeg), изображение не работает. Даже когда я пытался загрузить изображение, его размер (Content-Length) аналогичен размеру оригинала, но ни одна программа не может его открыть, потому что он сломан. Я не совсем уверен, как это работает с текстом и html, но не с изображениями (хотя Content-Type был установлен правильно)?

+0

Я думаю, вам нужно показать пример точного типа данных, которые вы пытаетесь снести. – James

+0

@James: Вместо этого я отредактировал его для ссылки на изображение. Это то, что я ищу, чтобы иметь возможность делать. Это PNG. – cuzmAZN

ответ

1

Вы должны просто отправить ответ вместо этого, если вам действительно не нужно его буферизировать по какой-либо причине. Пример:

var target = 'http://i.stack.imgur.com/5CXfX.png'; 
http.get(target, function(response) { 
    if (response.statusCode === 200) { 
    res.setHeader('Content-Type', 'image/png'); 
    return response.pipe(res); 
    } 

    // drain the response and discard it 
    response.resume(); 
    res.send(response.statusCode); 
}); 
+0

Привет! Что делает этот response.pipe() действительно и как он отличается от Buffer()? – cuzmAZN

+0

Информацию о 'pipe()' см. В документации [node.js] (http://nodejs.org/docs/latest/api/stream.html#stream_readable_pipe_destination_options). – mscdex