Работа с двоичными данными в Javascript (Firefox) - PullRequest
0 голосов
/ 04 мая 2011

У меня есть изображение, которое я прочитал в переменную в 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 - это изображение.Я могу проверить это, используя библиотеку Base64, найденную в http://emilsblog.lerch.org/2009/07/javascript-hacks-using-xhr-to-load.html

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 Ответ

2 голосов
/ 04 мая 2011

Для вашего первого вопроса, если у вас есть фактические данные изображения (в отличие от их кодировки PNG), вы можете просто использовать холст изображения. На самом деле вам нужно будет либо выполнить функцию base64, либо создать новый обработчик протокола, в котором вы раздаете свой входной поток в виде канала входного потока. Насколько хорошо это будет работать, зависит от того, как называется вышеприведенный код.

Что касается вашего второго вопроса, если вы передадите входной поток методу send () запроса POST XMLHttpRequest, тогда данные в потоке будут использоваться как есть как тело запроса POST. Сервер может просто прочитать его оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...