2014-09-27 57 views
0
的NodeJS我

有一點代碼:讀取遠程文件,並輸出到瀏覽器。使用文本和html。不要使用圖像。

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/pngimage/jpeg)時,圖像已損壞。即使我試圖下載圖片時,它的大小(Content-Length)就像原始大小一樣,但是沒有程序可以打開它,因爲它被破壞了。我不太確定它如何處理文本和HTML,但不與圖像(即使Content-Type設置正確)?

+0

我認爲你需要展示一個你想要拉下的數據的確切類型的例子。 – James 2014-09-27 09:28:43

+0

@James:我將它編輯爲圖片鏈接。這正是我期望能夠做到的。這是PNG。 – cuzmAZN 2014-09-27 09:33:44

回答

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 2014-09-27 22:15:40

+0

有關'pipe()'的信息,請參見[node.js文檔](http://nodejs.org/docs/latest/api/stream.html#stream_readable_pipe_destination_options)。 – mscdex 2014-09-27 22:21:24

相關問題