2012-05-02 44 views
13

Các W3 thông báo rằng họ có ý định không chấp các BlobBuilder API ưu tiên cho cái mới Blob API.Sự khác biệt giữa BlobBuilder và hàm tạo Blob mới là gì?

Nếu tôi đã sử dụng BlobBuilder trong một ứng dụng JavaScript, làm thế nào tôi có thể chuyển đổi để sử dụng API Blob mới này? WebKitBlobBuilder cũ vẫn có sẵn trong WebKit mới nhất (và Chrome Canary), nhưng nó sẽ sớm bị xóa. Trước khi bạn có thể viết một cái gì đó như thế này:

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

Cách viết này có thể được viết lại để sử dụng hàm tạo Blob mới? Cảm ơn bạn.

+0

Bài viết này có một lời giải thích tốt: http://updates.html5rocks.com/ 2012/06/Don-t-Xây dựng-Blobs-Xây dựng-Them – neave

Trả lời

13

Đi qua một ArrayBuffer để các nhà xây dựng Blob dường như bị phản đối, vì vậy:

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

Điều này mang lại cho tôi lỗi không được bắt buộc: TYPE_MISMATCH_ERR: Ngoại lệ tệp DOM 11 Bạn có ví dụ làm việc đầy đủ không? –

+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

Từ những thông số kỹ thuật nói đơn giản như thế này. Chỉ cần kiểm tra các ví dụ về trang bạn đã đăng.

var blob = new Blob(arrayBuffer); 

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

+0

Ah cảm ơn. Nó cũng giống như Blob() có một đối tượng Array đơn giản, không phải là một ArrayBuffer - ít nhất là trong Chrome. Bạn không chắc liệu đây có phải là cách mà nó được cho là không, nhưng lỗi của Chrome lại khác. – neave

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

Điều này bây giờ tạo ra một cảnh báo: "Các giá trị ArrayBuffer không được chấp nhận trong Blob Constructor. Sử dụng ArrayBufferView để thay thế." –

+2

'var blob = new Blob ([new Uint8Array (mảngBuffer)], {type: mimeString});' sẽ sửa lỗi đó cho bạn. – ellisbben