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

时间:2010-09-18 19:01:45

标签: javascript upload binary xmlhttprequest

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

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

  • 使用长字符串(like this)模拟包含标题,边界等的文件上传请求。
  • 在xhr对象(as such
  • 上设置一堆标题
  • 使用BlobBuilder,将字符串附加到构建器,并使用getBlob获取要上传的blob(as recommended在Chrome问题主题中关于此问题)

我正在寻找的,最重要的是,它是一个前向兼容的解决方案。谢谢!

2 个答案:

答案 0 :(得分: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);
}

点击此处:http://javascript0.org/wiki/Portable_sendAsBinary

答案 1 :(得分:1)

您可以使用base64对其进行编码并在服务器上对其进行解码。