2014-09-27 59 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

相关问题