Загрузка двоичных данных с использованием XMLHttpRequest, без overrideMimeType - PullRequest
6 голосов
/ 31 августа 2011

Я пытаюсь получить данные изображения в Javascript, используя XMLHttpRequest.

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://www.celticfc.net/images/doc/celticcrest.png");
xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
        var resp = xhr.responseText;
        console.log(resp.charCodeAt(0) & 0xff);
    }
};
xhr.send();

Первый байт этих данных должен быть 0x89, однако любые старшие байты возвращаются как 0xfffd (0xfffd & 0xff означает 0xfd).

Такие вопросы, как , этот предлагают решения с использованием функции overrideMimeType(), однако это не поддерживается на используемой платформеQt / QML).

Как правильно загрузить данные?

Ответы [ 2 ]

5 голосов
/ 31 августа 2011

Google I / O 2011: демонстрация HTML5 для веб-разработчиков: Вау и как

Получить двоичный файл: новая горячность

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://www.celticfc.net/images/doc/celticcrest.png', true);

xhr.responseType = 'arraybuffer';

xhr.onload = function(e) {
   if (this.status == 200) {
       var uInt8Array = new Uint8Array(this.response); // Note:not xhr.responseText

       for (var i = 0, len = uInt8Array.length; i < len; ++i) {
           uInt8Array[i] = this.response[i];
       }

       var byte3 = uInt8Array[4]; // byte at offset 4
   }
}

xhr.send();
0 голосов
/ 31 августа 2011

Я не знаком с Qt, но нашел это в их документации

string Qt::btoa ( data )
Binary to ASCII - this function returns a base64 encoding of data.

Итак, если ваше изображение в формате png, вы можете попробовать:

resp = "data:image/png;base64," + btoa(resp);
document.write("<img src=\""+resp+"\">");
...