【问题标题】:blob does not accept Uint8Array on iosblob 在 ios 上不接受 Uint8Array
【发布时间】:2012-12-29 17:50:52
【问题描述】:

我尝试创建一个 Blob 对象并将 Uint8Array 传递给它的构造函数 它在 Windows 上的 chrome 和 firefox 上运行良好 然而,在 ios 上的 chrome 和 safari 中,Blod 不包含 Uint8Array 的数据,而是包含文本:[object Uint8Array]

我需要这个来将画布上传到服务器。

有解决办法吗?

【问题讨论】:

  • 听起来该方法需要字符串参数,但是您传入了一个对象,因此调用了 toString() 方法,在 JS 中,该方法返回类似于您的问题中的内容来表示对象。
  • 我不这么认为。它在 Windows pc 上运行良好,如果我传递一个普通数组。它工作正常。

标签: javascript ios google-chrome blob


【解决方案1】:

我正在努力解决完全相同的问题。当我用 ArrayBuffer 备份 Uint8Array 时,它在 Safari 和 Chrome 中都可以工作(尚未在其他浏览器中测试过),但 Chrome 会打印一条警告消息。 Chrome 说我必须在将 ArrayBuffer 传递给 Blob() 构造函数之前将其包装在 DataView 中。

// write the bytes of the string to an ArrayBuffer
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++) {
    ia[i] = byteString.charCodeAt(i);
}

new Blob([ab], {type: mimeString});

编辑

确切的 Chrome 弃用消息是:

ArrayBuffer 值在 Blob 构造函数中已弃用。采用 ArrayBufferView 代替。

【讨论】:

  • 不幸的是,这似乎对 Safari 6.0.3 (7536.28.10) 没有帮助。
  • 这帮助我找到了解决问题的方法:对于 Uint8Array u,我将 u.buffer 传递给 Blob 构造函数,而不是 u 本身。
  • 感谢@jtbandes 为我修复了它!我把头撞在桌子上好几个小时了:)
  • 请注意,您不必担心在 Blob 构造函数中使用 ArrayBuffer(并且已删除弃用消息)。见stackoverflow.com/questions/15293694/…bugs.webkit.org/show_bug.cgi?id=88389
  • @jtbandes 我遇到了类似的问题,我认为这与 Uint8Array 有关,我认为您的解决方案可能对我有所帮助,但我不确定该怎么做。你能看看我的问题,看看我如何能把你的回答结合起来谢谢。 stackoverflow.com/questions/31629868/…
猜你喜欢
  • 2021-10-31
  • 1970-01-01
  • 2018-09-08
  • 2012-09-25
  • 1970-01-01
  • 2014-05-31
  • 2020-11-18
  • 2012-05-17
  • 1970-01-01
相关资源
最近更新 更多