Tính năng hỗ trợ Blob cho IndexedDB được triển khai trên Chrome Dev

Chrome Dev đã hỗ trợ Blob trên IndexedDB.

Đây là một tính năng đã được mong đợi từ lâu của Chrome. Tính năng này cho phép API IndexedDB có thể lưu trữ và truy xuất Blob mà không cần chuyển đổi thành chuỗi Base64.

IndexedDB cung cấp lưu trữ liên tục kiểu khoá-giá trị quy mô lớn có sẵn trên hầu hết các trình duyệt hiện đại (Safari rõ ràng sẽ hỗ trợ trong iOS8 và Mac OS X 10.10). Hãy xem trạng thái triển khai.

Blob là một đối tượng nhị phân giống như tệp mà các công cụ JavaScript hiện đại có thể xử lý. Các đối tượng tệp kế thừa từ Blob. Bạn cũng có thể tìm nạp hình ảnh và tệp dưới dạng Blob thông qua XMLHttpRequest. Hãy xem trạng thái triển khai.

Lưu trữ Blob trên IndexedDB

Không có cách nào để phát hiện tình trạng sẵn có của Blob trong IndexedDB. Về cơ bản, bạn phải try-catch rồi sử dụng chuỗi thay vì Blob nếu không có chuỗi. Dưới đây là một số mã mẫu:

// Create an example Blob object
var blob = new Blob(['blob object'], {type: 'text/plain'});

try {
    var store = db.transaction(['entries'], 'readwrite').objectStore('entries');

    // Store the object  
    var req = store.put(blob, 'blob');
    req.onerror = function(e) {
        console.log(e);
    };
    req.onsuccess = function(event) {
        console.log('Successfully stored a blob as Blob.');
    };
} catch (e) {
    var reader = new FileReader();
    reader.onload = function(event) {
        // After exception, you have to start over from getting transaction.
        var store = db.transaction(['entries'], 'readwrite').objectStore('entries');

        // Obtain DataURL string
        var data = event.target.result;
        var req = store.put(data, 'blob');
        req.onerror = function(e) {
            console.log(e);
        };
        req.onsuccess = function(event) {
            console.log('Successfully stored a blob as String.');
        };
    };
    // Convert Blob into DataURL string
    reader.readAsDataURL(blob);
}

Hỗ trợ Blob cho IndexedDB cũng đã có trên Firefox và Internet Explorer. Cần điều tra hỗ trợ Safari.

Chúc bạn học vui!