【问题标题】:What's the difference between BlobBuilder and the new Blob constructor?BlobBuilder 和新的 Blob 构造函数有什么区别?
【发布时间】:2012-05-11 20:12:13
【问题描述】:

W3 宣布他们打算弃用 BlobBuilder API 以取代新的 Blob API.

如果我已经在 J​​avaScript 应用程序中使用 BlobBuilder,如何转换为使用这个新的 Blob API?旧的 WebKitBlobBuilder 在最新的 WebKit(和 Chrome Canary)中仍然可用,但很快就会被删除。在你可以写这样的东西之前:

var bb = new BlobBuilder();
bb.append(arrayBuffer);
var blob = bb.getBlob(mimeString);

如何重写它以使用新的 Blob 构造函数?谢谢。

【问题讨论】:

标签: javascript html webkit w3c


【解决方案1】:

将 ArrayBuffer 传递给 Blob 构造函数似乎已被弃用,因此:

var dataView = new DataView(arrayBuffer);
var blob = new Blob([dataView], { type: mimeString });

【讨论】:

  • 这给了我未捕获的错误:TYPE_MISMATCH_ERR: DOM File Exception 11 你有完整的工作示例吗?
  • var arrayBuffer = new ArrayBuffer(16); var mimeString = "text/plain"; var dataView = new DataView(arrayBuffer); var blob = new Blob([dataView], { type: mimeString }); console.log(blob);
【解决方案2】:

从规格上说,它应该像这样简单。只需检查您发布的页面示例即可。

var blob = new Blob(arrayBuffer);

[构造函数,构造函数((ArrayBuffer or Blob or DOMString)

【讨论】:

  • 啊,谢谢。看起来 Blob() 需要一个简单的 Array 对象,而不是 ArrayBuffer - 至少在 Chrome 中是这样。不确定这是否应该是这样,否则 Chrome 会出错。
【解决方案3】:
var blob = new Blob([arrayBuffer], {type: mimeString});

【讨论】:

  • 现在会产生警告:“ArrayBuffer 值在 Blob 构造函数中已弃用。请改用 ArrayBufferView。”
  • var blob = new Blob([new Uint8Array(arrayBuffer)], {type: mimeString}); 会为你解决这个问题。
猜你喜欢
  • 2014-01-15
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多