javascript从缓冲区(nodejs / socket.io)

(对不起,我的英文)嗨,我有一个应用程序创build与nodejs推送图像数据到网页。

来自nodejs服务器的数据使用socket.io被压入网页

这个数据是完整的图像,我试图写入光盘看到图像,是好的。 数据被放入一个缓冲区,以base64编码,然后发送到网页,我试图显示使用'data:image / png; base64,'+数据,但没有发生…数据似乎是“完整的”,包括PNG图像的标题。

服务器使用节点与另一个客户端(这在C ++中)进行通信,客户端创build图像并发送到nodejs-thrift服务器,当一个图像被接收时,nodejs-socket.io服务器推入网页。

一些代码:serverside

var http = require('http'), url = require('url'), fs = require('fs'), sys = require('sys'); var hserver = http.createServer(function(request,response){ var path = url.parse(request.url).pathname; switch(path){ case '/': fs.readFile(__dirname + '/index.html',function(err,data){ if(err) return send404(res); response.writeHead(200,{'Content-Type':'text/html'}); response.write(data,'utf8'); response.end(); }); break; default: send404(response); } }), send404 = function(res){ res.writeHead(404); res.write('404'); res.end(); }; hserver.listen(8080); var io = require('socket.io'); var socket = io.listen(hserver); //this is the function in the Thrift part to send the image data to webpage using socket.io var receiveImage = function(image,success){ buff= new Buffer(image.data.toString('base64'),'base64'); socket.broadcast({ data: buff.toString('base64'), width: image.width, height: image.height }); success(true); } 

在网页中,我尝试使用socket.io的on.messagecallback加载图像

 <script> var socket = new io.Socket(null,{port:8080}); socket.connect(); socket.on('message',function(obj){ document.getElementById('imagenes').src='data:image/png;base64,'+obj.data.toString(); }); socket.on('connect',function(){ document.getElementById('stream').innerHTML = "Conectado!" }); </script> 

但是我看不到图像.. obj.data.toString('base64')创build一个像这样的string:

  PNGIHDRKIDATxYw5L1LlFMM/migzWUadOadLUd+43PIfPU9VU5AJAg3dIWUmHAMajS8GUuq ............ ............. /NIlWDHUDmIPdHIEND 

是图像的所有数据

我怎么能显示图像? (也许使用img标签或canvas)

提前致谢。

编辑:代码的一些改变,但没有改变..我的猜测..图像不显示,因为数据(PNGIHDRKIDATxYw …… PdHIENDB)不是正确的数据..我search这个和PNG数据用于显示图像内联是不同的(没有标题PNGIHDRKIDAT和尾部ENDB),我删除头和尾部,并不显示..也许我收到的数据是不正确的,但如果我尝试写入文件系统在服务器端使用nodejs(fs)我得到正确的图像(使用二进制编码fs.writeFileSync(“imagen.png”,image.data.toString('binary'),'binary')),但与base64编码theres没有图像。

在C ++端(我创build图像并将它们发送到nodejs服务器)。 我需要在base64中编码数据。 然后在节点,我把这个数据放入一个base64编码的缓冲区,并发送到网页。

根据我的经验,图像的base64string应该像下面这样加载一个数据url:

 <img alt="some image" src="data(PNGIHDRKIDATxYw5L1LlFMM/migzWUadOadLUd+43PIfPU9VU5AJAg3dIWUmHAMajS8GUuq .........)" /> 

你的客户端代码看起来很好(除了.toString('base64')在浏览器中对String对象不做任何事情,只对Node中的Buffer对象做任何事情之外),我在猜测这个问题在receiveImage ,应该是:

 var receiveImage = function(image,success) { socket.broadcast({ data: image.data.toString('base64'), width: image.width, height:image.height }); success(true); }