Obsługa bloba IndexedDB już w wersji deweloperskiej Chrome

Eiji Kitamura
Eiji Kitamura

Wersja deweloperska Chrome obsługuje już Blob w IndexedDB.

Jest to długo oczekiwana funkcja Chrome, która pozwala interfejsowi IndexedDB API na przechowywanie i pobieranie obiektów blob bez konwertowania ich na ciąg Base64.

IndexedDB zapewnia pamięć trwałą o dużej skali. Jest ona dostępna w większości nowoczesnych przeglądarek (wygląda na to, że Safari będzie obsługiwać systemy iOS8 i Mac OS X 10.10). Sprawdź stan implementacji.

Blob to przypominający plik obiekt binarny, który są obsługiwane przez nowoczesne silniki JavaScriptu. Obiekty plików dziedziczą z obiektu Blob. Obrazy i pliki możesz też pobierać jako obiekty blob za pomocą XMLHttpRequest. Sprawdź stan implementacji.

Przechowywanie obiektu blob w IndexedDB

Nie ma sposobu na wykrywanie dostępności blobów w IndexedDB. Musisz spróbować przechwycić obiekty, a jeśli nie jest dostępny, użyć ciągu znaków zamiast obiektu Blob. Oto przykładowy kod:

// 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);
}

Obsługa obiektów Blob w IndexedDB jest już dostępna w Firefoksie i Internet Explorerze. Sprawdź obsługę przeglądarki Safari.

Miłej zabawy!