您好,匿名用户
随意问技术百科期待您的加入

nodejs 如何读取远程的图片并显示出来?

+1 投票

现在需要这样一个功能: 通过 GET 参数 "url" , 读取图片并显示图片

我现在的代码是:

var http = require('http');
var url  = require('url');
http.createServer(function (req, res) {
    var params = url.parse( req.url , true );
    var IMGS = new imageServer( http , url);
    IMGS.http( params.query.url  , function( data ){
    	res.writeHead(200, {"Content-Type": data.type}); 
    	var img = new Buffer(data.base64, 'base64').toString('binary');
        console.log(data.base64);
    	res.end( img );
    });

}).listen(8124);

var imageServer = function( http , url ){
	var _url  = url;
	var _http = http;

	this.http = function(url , callback , method){
		method      = method || 'GET';
		callback    = callback || function(){};
		var urlData = _url.parse(url);
		var request = _http.createClient(80 , urlData.host).
		                    request(method, urlData.pathname, {"host": urlData.host});

		request.end();

		request.on('response', function (response)
		{
			var type = response.headers["content-type"],
			    body = "";

		    response.setEncoding('binary');
		    response.on('end', function () {
		        var base64 = new Buffer(body, 'binary').toString('base64');
		        var data = {
		        	type   : type ,
		        	base64 : base64 
		        };
		        callback(data);
		        
		    });
		    response.on('data', function (chunk) {
		        if (response.statusCode == 200) body += chunk;
		    });
		});

	};
};

在终端可以看到base64编码后的数据 , 但浏览器只显示空白的图片. 求解

用户头像 提问 2012年 12月1日 @ Morgana 上等兵 (251 威望)
编辑 2013年 1月26日 @Saber
分享到:

1个回答

+2 投票
 
最佳答案

找到问题

//不能为 res.end(); 输出二进制数据

更改后的代码为:

var http = require('http');
var url = require('url');
http.createServer(function(req, res) {

    var params = url.parse(req.url, true);

    var IMGS = new imageServer(http, url);

    IMGS.http(params.query.url, function(data) {
        res.writeHead(200, {"Content-Type": data.type});
        res.write(data.body, "binary");
        res.end();
    });

}).listen(8124);

var imageServer = function(http, url) {
    var _url = url;
    var _http = http;

    this.http = function(url, callback, method) {
        method = method || 'GET';
        callback = callback ||
        function() {};
        var urlData = _url.parse(url);
        var request = _http.createClient(80, urlData.host).
        request(method, urlData.pathname, {
            "host": urlData.host
        });

        request.end();

        request.on('response', function(response) {
            var type = response.headers["content-type"],
                body = "";
            response.setEncoding('binary');
            response.on('end', function() {
                var data = {
                    type: type,
                    body: body
                };
                callback(data);

            });
            response.on('data', function(chunk) {
                if (response.statusCode == 200) body += chunk;
            });
        });

    };
};
用户头像 回复 2012年 12月1日 @ Amumu 上等兵 (340 威望)
编辑 2013年 1月26日 @Saber
提一个问题:

相关问题

0 投票
1 回复 45 阅读
用户头像 提问 2012年 12月1日 @ Morgana 上等兵 (251 威望)
0 投票
1 回复 29 阅读
用户头像 提问 2013年 11月21日 @ Hepheastus 上等兵 (182 威望)
0 投票
0 回复 145 阅读
0 投票
1 回复 34 阅读
0 投票
1 回复 26 阅读
用户头像 提问 2013年 12月20日 @ Vladimir 上等兵 (275 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...