Chrome Dev đã hỗ trợ Blob trên IndexedDB.
Đây là một tính năng được chờ đợi từ lâu cho Chrome, cho phép API IndexedDB có thể lưu trữ và truy xuất Blob mà không cần chuyển đổi Blob thành chuỗi Base64.
IndexedDB cung cấp bộ nhớ cố định loại khoá-giá trị trên quy mô lớn có trên hầu hết các trình duyệt hiện đại (có vẻ như Safari sẽ hỗ trợ trong iOS8 và Mac OS X 10.10). Hãy xem trạng thái triển khai của chiến dịch.
Blob là một đối tượng tệp nhị phân giống như tệp mà các công cụ JavaScript hiện đại có thể xử lý. Đố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 của chiến dịch.
Lưu trữ Blob trên IndexedDB
Không có cách nào để phát hiện tính năng có sẵn Blob trong IndexedDB. Về cơ bản, bạn phải thử-bắt rồi sử dụng chuỗi thay vì Blob nếu không có. 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);
}
Tính năng hỗ trợ Blob cho IndexedDB cũng đã có trên Firefox và Internet Explorer. Cần điều tra tính năng hỗ trợ Safari.
Chúc bạn học vui!