在Javascript中使用二进制数据(Firefox)

时间:2011-05-04 13:39:14

标签: javascript firefox

我有一个图像,我已通过以下代码读入JS中的变量(最终通过剪贴板,如果这很重要)。

var rawImg = new Object();
//...populate rawImg (code left out for brevity)

var bis = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
var is = rawImg.value.QueryInterface(Components.interfaces.nsIInputStream);
bis.setInputStream(is);
var img =  bis.readBytes(is.available());

img是一张图片。我可以使用http://emilsblog.lerch.org/2009/07/javascript-hacks-using-xhr-to-load.html

中的Base64库验证这一点
var base64Img = Base64.encodeBinary( img );
document.getElementById("holder").innerHTML = '<img src="data:image/png;base64,'+base64Img+'" alt="some image"/>';

这将适当显示图像。这段代码非常特定于Mozilla,我很好,因为我的要求是严格支持FF4 +。

我的问题是两个部分,任何一个解决方案都会令人满意。是否可以显示此图像而无需转换为base64,可能使用<canvas>标记?是否可以将此图像作为二进制文件传输到服务器(XHR或其他),而无需转换为base64?

我可以base64.encode(),将字符串传输到服务器,然后在服务器端进行解码,但似乎可能有更简单的方法。

1 个答案:

答案 0 :(得分:2)

对于你的第一个问题,如果你有实际的图像数据(而不是它的PNG编码),你可以使用canvas imagedata。实际上,您需要执行base64操作或创建新的协议处理程序,您可以在其中以输入流通道的形式分发输入流。这将如何工作取决于如何调用上面的代码。

对于第二个问题,如果将输入流传递给POST XMLHttpRequest的send()方法,则流中的数据将按原样用作POST请求的主体。服务器可以从那里读取它。