nodejs 如何读取远程的图片并显示出来?
现在需要这样一个功能: 通过 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编码后的数据 , 但浏览器只显示空白的图片. 求解
性感的冰糕
11 years, 9 months ago
Answers
找到问题
//不能为 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; }); }); }; };
sjzqnr
answered 11 years, 9 months ago