【问题标题】:Uploading a binary string in WebKit/Chrome using XHR (equivalent to Firefox's sendAsBinary)使用 XHR 在 WebKit/Chrome 中上传二进制字符串(相当于 Firefox 的 sendAsBinary)
【发布时间】:2011-04-14 04:05:48
【问题描述】:

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

有很多变通方法,到目前为止,它们都不适合我:

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

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

【问题讨论】:

    标签: javascript upload binary xmlhttprequest


    【解决方案1】:

    我遇到了同样的问题。

    这个对我有用:

    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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 如果您可以轻松访问所请求的服务器。我尝试从我的域(允许 CORS)访问 couchdb 以将附件放在文档上(docs.couchdb.org/en/latest/api/document/…)。会尝试塞巴斯蒂安的把戏。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      相关资源
      最近更新 更多