Загрузка двоичной строки в WebKit / Chrome с использованием XHR (эквивалентно sendAsBinary Firefox) - PullRequest
8 голосов
/ 18 сентября 2010

Я работаю над веб-приложением, которое использует несколько передовых функций WebKit. По сути, он делает это: читает локальный файл с FileReader, разархивирует каждый файл в строку, используя библиотеку разархивирования JavaScript, и POST-файл каждого файла, используя XMLHttpRequest. Это прекрасно работает для текстовых файлов, но, к сожалению, он портит двоичные файлы (в данном случае изображения). В Firefox есть метод sendAsBinary, который решает эту проблему, но он нестандартный и, более того, он не работает с WebKit / Chrome, от которого мы зависим в других функциях.

Есть тонна обходных путей, и пока ни один из них не работает для меня:

  • Обработка запроса на загрузку файла с заголовками, границами и т. Д. В длинной строке (, например ).
  • Установка группы заголовков для объекта xhr ( как таковой )
  • Использование BlobBuilder, добавление строки в построитель и использование getBlob для получения загружаемого большого двоичного объекта ( в соответствии с рекомендациями в теме выпуска Chrome об этом)

Прежде всего, я ищу совместимое решение. Спасибо!

Ответы [ 2 ]

6 голосов
/ 25 марта 2012

У меня была такая же проблема.

Этот работал для меня:

XMLHttpRequest.prototype.sendAsBinary = function(datastr) {
    function byteValue(x) {
        return x.charCodeAt(0) & 0xff;
    }
    var ords = Array.prototype.map.call(datastr, byteValue);
    var ui8a = new Uint8Array(ords);
    this.send(ui8a.buffer);
}

проверьте здесь: http://javascript0.org/wiki/Portable_sendAsBinary

1 голос
/ 19 сентября 2010

Вы можете закодировать его с base64 и декодировать на сервере.

...