2012-05-02 47 views
13

的W3宣佈,他們打算如果我已經在JavaScript應用程序中使用BlobBuilder棄用優先的BlobBuilder APIBlob API.BlobBuilder和新的Blob構造函數有什麼區別?

,我怎麼可以轉換到使用這個新的Blob API?舊的WebKitBlobBuilder仍然可以在最新的WebKit(和Chrome Canary)中使用,但它很快就會被刪除。之前,你可以寫這樣的事情:

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

這怎麼可以重寫使用新的Blob構造函數?謝謝。

+0

這篇文章有一個很好的解釋:http://updates.html5rocks.com/ 2012/06/Don-t-Build-Blobs-Construct-Them – neave

回答

13

傳遞一個ArrayBuffer的斑點構造似乎棄用,因此:

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

這給了我未捕獲的錯誤:TYPE_MISMATCH_ERR:DOM文件異常11 您是否有完整的工作示例? –

+1

'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); 

[Constructor, Constructor((ArrayBuffer or Blob or DOMString)

+0

啊謝謝。它看起來像Blob()接受一個簡單的Array對象,而不是ArrayBuffer - 至少在Chrome中。不知道這是應該如何,但Chrome的錯誤,否則。 – neave

1
var blob = new Blob([arrayBuffer], {type: mimeString}); 
+2

現在會產生一個警告:「在Blob構造函數中不推薦使用ArrayBuffer值,而是使用ArrayBufferView。」 –

+2

'var blob = new Blob([new Uint8Array(arrayBuffer)],{type:mimeString});'將爲您解決這個問題。 – ellisbben

相關問題