使用XHR在WebKit/Chrome中上传二进制字符串(相当于Firefox的sendAsBinary)

hey*_*erk 8 javascript binary upload xmlhttprequest

我正在开发一个使用多种尖端WebKit功能的webapp.它实质上是这样的:FileReader使用JavaScript解压缩库将每个文件解压缩到一个字符串中,然后使用XMLHttpRequest对每个文件进行POST,从而读取本地文件.这适用于文本文件,但遗憾的是它会破坏二进制文件(在本例中为图像).Firefox有一种sendAsBinary解决这个问题的方法,但它是非标准的,更重要的是,它不适用于我们依赖于其他功能的WebKit/Chrome.

有一些解决方法,到目前为止,它们都不适用于我:

  • 在长字符串中模拟带有标题,边界等的文件上载请求(如下所示).
  • 在xhr对象上设置一堆头文件(如此)
  • 使用BlobBuilder,将字符串附加到构建器,并使用getBlob以获取要上载的blob(根据 Chrome问题线程中的建议)

我最需要的是一个前向兼容的解决方案.谢谢!

Seb*_*ien 6

我有同样的问题.

这个对我有用:

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);
}
Run Code Online (Sandbox Code Playgroud)

点击这里:http://javascript0.org/wiki/Portable_sendAsBinary