亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

使用HTML5 IndexDB存儲圖像和文件的示例

2024-08-26 00:21:08
字體:
供稿:網(wǎng)友

有一天,我們寫了關(guān)于如何在localStorage中保存圖像和文件的文章,它是關(guān)于我們今天可用的實(shí)用主義。 然而,localStorage有一些性能影響 - 我們將在稍后的博客中討論這個問題 - 并且未來期望的方法是使用IndexedDB。 在這里,我將向您介紹如何在IndexedDB中存儲圖像和文件,然后通過ObjectURL呈現(xiàn)它們。

本文是翻譯過來的,原文在這里 Storing images and files in IndexedDB

關(guān)于作者: Robert Nyman [Editor emeritus]

Technical Evangelist & Editor of Mozilla Hacks. Gives talks & blogs about HTML5, JavaScript & the Open Web. Robert is a strong believer in HTML5 and the Open Web and has been working since 1999 with Front End development for the web - in Sweden and in New York City. He regularly also blogs atrobertnyman.com and loves to travel and meet people.

使用IndexDB存儲圖像和文件的常規(guī)步驟

首先,我們來談?wù)勎覀儗?chuàng)建一個IndexedDB數(shù)據(jù)庫,將文件保存到其中然后將其讀出并顯示在頁面中的步驟:

1、創(chuàng)建或打開數(shù)據(jù)庫
2、創(chuàng)建一個objectStore
3、將圖像文件檢索為blob
4、初始化一個數(shù)據(jù)庫事物
5、保存圖像blob到數(shù)據(jù)庫中去
6、讀出保存的文件并從中創(chuàng)建ObjectURL并將其設(shè)置為頁面中圖像元素的src

1、創(chuàng)建或打開數(shù)據(jù)庫。

// IndexedDBwindow.indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB,    IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.OIDBTransaction || window.msIDBTransaction,    dbVersion = 1;/*     Note: The recommended way to do this is assigning it to window.indexedDB,    to avoid potential issues in the global scope when web browsers start     removing prefixes in their implementations.    You can assign it to a varible, like var indexedDB… but then you have     to make sure that the code is contained within a function.*/// Create/open databasevar request = indexedDB.open("elephantFiles", dbVersion);request.onsuccess = function (event) {    console.log("Success creating/accessing IndexedDB database");    db = request.result;    db.onerror = function (event) {        console.log("Error creating/accessing IndexedDB database");    };        // Interim solution for Google Chrome to create an objectStore. Will be deprecated    if (db.setVersion) {        if (db.version != dbVersion) {            var setVersion = db.setVersion(dbVersion);            setVersion.onsuccess = function () {                createObjectStore(db);                getImageFile();            };        }        else {            getImageFile();        }    }    else {        getImageFile();    }}// For future use. Currently only in latest Firefox versionsrequest.onupgradeneeded = function (event) {    createObjectStore(event.target.result);};

使用它的預(yù)期方法是在創(chuàng)建數(shù)據(jù)庫時觸發(fā)onupgradeneeded事件或獲取更高版本號。 目前僅在Firefox中支持此功能,但很快將在其他Web瀏覽器中支持。 如果Web瀏覽器不支持此事件,則可以使用已棄用的setVersion方法并連接到其onsuccess事件。

2、創(chuàng)建一個objectStore(如果它尚不存在)

// Create an objectStoreconsole.log("Creating objectStore")dataBase.createObjectStore("elephants");

在這里,您創(chuàng)建一個ObjectStore,您將存儲數(shù)據(jù) - 或者在我們的例子中,文件 - 并且一旦創(chuàng)建,您不需要重新創(chuàng)建它,只需更新其內(nèi)容即可。

3、將圖像文件檢索為blob

// Create XHRvar xhr = new XMLHttpRequest(),    blob;xhr.open("GET", "elephant.png", true);// Set the responseType to blobxhr.responseType = "blob";xhr.addEventListener("load", function () {    if (xhr.status === 200) {        console.log("Image retrieved");                // File as response        blob = xhr.response;        // Put the received blob into IndexedDB        putElephantInDb(blob);    }}, false);// Send XHRxhr.send();

此代碼直接將文件的內(nèi)容作為blob獲取。目前只支持Firefox。 收到整個文件后,將blob發(fā)送到函數(shù)以將其存儲在數(shù)據(jù)庫中。

4、初始化一個數(shù)據(jù)庫事物

// Open a transaction to the databasevar transaction = db.transaction(["elephants"], IDBTransaction.READ_WRITE);

要開始向數(shù)據(jù)庫寫入內(nèi)容,您需要使用objectStore名稱和要執(zhí)行的操作類型(在本例中為read和write)啟動事務(wù)。

5、保存圖像blob到數(shù)據(jù)庫中去

// Put the blob into the dabasetransaction.objectStore("elephants").put(blob, "image");

一旦事務(wù)到位,您將獲得對所需objectStore的引用,然后將您的blob放入其中并為其提供密鑰。

6、讀出保存的文件并從中創(chuàng)建ObjectURL并將其設(shè)置為頁面中圖像元素的src

// Retrieve the file that was just storedtransaction.objectStore("elephants").get("image").onsuccess = function (event) {    var imgFile = event.target.result;    console.log("Got elephant!" + imgFile);    // Get window.URL object    var URL = window.URL || window.webkitURL;    // Create and revoke ObjectURL    var imgURL = URL.createObjectURL(imgFile);    // Set img src to ObjectURL    var imgElephant = document.getElementById("elephant");    imgElephant.setAttribute("src", imgURL);    // Revoking ObjectURL    URL.revokeObjectURL(imgURL);};

使用相同的事務(wù)來獲取剛剛存儲的圖像文件,然后創(chuàng)建一個objectURL并將其設(shè)置為頁面中圖像的src。 例如,這也可以是一個附加到腳本元素的JavaScript文件,然后它將解析JavaScript。

最后完整代碼

(function () {    // IndexedDB    var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB,        IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.OIDBTransaction || window.msIDBTransaction,        dbVersion = 1.0;    // Create/open database    var request = indexedDB.open("elephantFiles", dbVersion),        db,        createObjectStore = function (dataBase) {            // Create an objectStore            console.log("Creating objectStore")            dataBase.createObjectStore("elephants");        },        getImageFile = function () {            // Create XHR            var xhr = new XMLHttpRequest(),                blob;            xhr.open("GET", "elephant.png", true);            // Set the responseType to blob            xhr.responseType = "blob";            xhr.addEventListener("load", function () {                if (xhr.status === 200) {                    console.log("Image retrieved");                                        // Blob as response                    blob = xhr.response;                    console.log("Blob:" + blob);                    // Put the received blob into IndexedDB                    putElephantInDb(blob);                }            }, false);            // Send XHR            xhr.send();        },        putElephantInDb = function (blob) {            console.log("Putting elephants in IndexedDB");            // Open a transaction to the database            var transaction = db.transaction(["elephants"], IDBTransaction.READ_WRITE);            // Put the blob into the dabase            var put = transaction.objectStore("elephants").put(blob, "image");            // Retrieve the file that was just stored            transaction.objectStore("elephants").get("image").onsuccess = function (event) {                var imgFile = event.target.result;                console.log("Got elephant!" + imgFile);                // Get window.URL object                var URL = window.URL || window.webkitURL;                // Create and revoke ObjectURL                var imgURL = URL.createObjectURL(imgFile);                // Set img src to ObjectURL                var imgElephant = document.getElementById("elephant");                imgElephant.setAttribute("src", imgURL);                // Revoking ObjectURL                URL.revokeObjectURL(imgURL);            };        };    request.onerror = function (event) {        console.log("Error creating/accessing IndexedDB database");    };    request.onsuccess = function (event) {        console.log("Success creating/accessing IndexedDB database");        db = request.result;        db.onerror = function (event) {            console.log("Error creating/accessing IndexedDB database");        };                // Interim solution for Google Chrome to create an objectStore. Will be deprecated        if (db.setVersion) {            if (db.version != dbVersion) {                var setVersion = db.setVersion(dbVersion);                setVersion.onsuccess = function () {                    createObjectStore(db);                    getImageFile();                };            }            else {                getImageFile();            }        }        else {            getImageFile();        }    }        // For future use. Currently only in latest Firefox versions    request.onupgradeneeded = function (event) {        createObjectStore(event.target.result);    };})();

瀏覽器支持

URL API支持性

HTML5,IndexDB,存儲,圖像

indexDb

HTML5,IndexDB,存儲,圖像

Github源碼

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到HTML教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
欧美一区激情| 亚洲第一页在线视频| 日本一级在线观看| 欧日韩在线观看| 亚洲精品av在线| 欧美三级自拍| 亚洲欧美一区二区三区四区五区| 中文字幕在线直播| 91av在线免费视频| 精品人妻少妇AV无码专区| 国产日韩精品电影| 狂野欧美性猛交xxxx| 国产成人在线综合| 中文字幕乱码在线| 亚洲精品va| 2021久久精品国产99国产精品| 91久久精品| 国产爆初菊在线观看免费视频网站| 日韩综合在线| 亚洲成人自拍视频| 一道本一区二区| 最新av在线播放| 无码久久精品国产亚洲av影片| 国产美女三级无套内谢| 五月天婷婷导航| 日韩精品一区在线视频| wwwav在线播放| 欧美午夜www高清视频| 国产99久久久| 国产成人中文字幕| 欧美日产国产精品| 免费试看一区| 三级一区在线视频先锋| 羞羞网www| 亚洲精品无遮挡| 国产欧美一区二区三区沐欲| 78国产伦精品一区二区三区| 亚洲系列在线观看| 日本久久亚洲电影| av资源站久久亚洲| 国产精品久久久久久久久久久久久久久久久久| 黄色片视频在线观看| 黄视频在线免费看| 亚洲小视频在线观看| 中文av一区特黄| 丰满少妇一区二区三区专区| 国产无遮挡aaa片爽爽| 亚洲av无码久久精品色欲| 丝袜美腿高跟呻吟高潮一区| 91在线亚洲| 欧美精品日韩| 国产日产精品一区二区三区| 日韩精品久久久久久久电影99爱| 污污的视频免费观看| xfplay每日更新av资源| jizz内谢中国亚洲jizz| 国产探花一区在线观看| 成人亚洲欧美| 亚洲尤物视频在线| 爽爽爽在线观看| 日韩欧美电影在线| 欧美日韩成人免费| 成人久久视频在线观看| 激情国产在线| 中文字幕第15页| 8090成年在线看片午夜| 国模视频一区二区三区| 久久久久久久久久久久久9999| 国产日韩免费| 精品成人免费自拍视频| 欧美日韩亚洲国产一区| 精品美女在线观看| 91蝌蚪porny| 美女视频一区二区| 国产欧美日韩激情| 深夜福利国产精品| 一道本在线观看视频| 精品视频在线观看网站| 精品成人私密视频| 欧美天堂视频| 日韩欧美在线综合网| 无码人妻精品一区二区三区9厂| 国产精品麻豆久久久| 日本韩国在线视频爽| 亚洲成a人在线观看| 日韩欧美国产精品| 日韩精品一区二区三区四区五区| 日产精品一区二区| 麻豆极品一区二区三区| 高h调教冰块play男男双性文| 久久亚洲午夜电影| 国产精品美女久久久久久2018| 天堂va在线| www.777色| 浮生影视网在线观看免费| 欧美激情欧美狂野欧美精品| 亚洲精品免费在线观看| 欧美精品一区二区三区高清aⅴ| 国产一级大片在线观看| 在线免费观看一区二区| 可以在线观看的黄色网址| 久久久999精品免费| 另类小说综合网| 欧美视频一区二区三区四区| 亚洲男人天堂久久| 快射av在线播放一区| 一本一道久久a久久综合精品| 国产精品人人爽人人做我的可爱| 国产精品91免费在线| av在线加勒比| 97视频在线观看网站| 国内精品伊人久久久| 羞羞影视羞羞在线| 亚洲欧美tv| 午夜免费在线观看精品视频| 五月天婷婷色综合| 亚洲第九十九页| 成人午夜激情| 久久精品凹凸全集| 亚洲人精品午夜在线观看| 欧美久久视频| 黄色片视频免费观看| 成人高清视频免费观看| 99热国产在线| 日本成址在线观看| 亚洲区综合中文字幕日日| 一级毛片免费视频| 久久久久国产精品午夜一区| 黄网站视频在线观看| 日日日日人人人夜夜夜2017| 国产xxx69麻豆国语对白| 亚洲性图久久| 国产精品99久久| 亚洲毛片在线观看| 91精品视频一区| 欧美女同在线观看| 在线视频 91| 少妇精品一区二区| 一区二区三区四区毛片| 国产丝袜精品视频| 国产精品无码专区在线观看| 欧美一区二区三区在线看| 黄色在线免费网站| 不卡欧美aaaaa| www.毛片com| 国产91精品一区二区麻豆网站| 中文字幕在线观看免费| 少妇太紧太爽又黄又硬又爽小说| 91香蕉亚洲精品| 7777久久香蕉成人影院| 三区四区不卡| 玖玖视频精品| 国产午夜精品视频免费不卡69堂| 97精品国产露脸对白| 福利成人导航| 国产一区二区精品久| 久草这里只有精品视频| 国产自产高清不卡| 最新亚洲伊人网| 日本精品久久电影| 先锋影音男人资源| 亚洲永久精品大片| 91人人爽人人爽人人精88v| 欧美一级在线播放| 青草在线视频在线观看| 视频一区视频二区欧美| 国自产精品手机在线观看视频| 在线观看精品视频看看播放| 国产美女www爽爽爽视频| 国产人妖在线观看| 在线观看a网站| 亚洲成色777777女色窝| 色综合久久久久久久| 黄色一级视频免费看| 91网址在线观看精品| 97视频在线观看视频免费视频| www..com.cn蕾丝视频在线观看免费版| 日韩一区中文字幕| 国产日韩视频在线观看| 69久久夜色精品国产69蝌蚪网| 亚洲sss综合天堂久久| 国模一区二区三区| 中文字幕成在线观看| 99re这里都是精品| 香蕉视频在线网址| 人体私拍套图hdxxxx| 日韩精品一区二区三区蜜臀| 91综合久久一区二区| 国产三级三级看三级| 自慰无码一区二区三区| 日本一区高清在线视频| 你懂得在线观看| 国产精品免费一区二区三区在线观看| 精品制服美女丁香| 国产视频一区二区视频| 国产精品一区二区果冻传媒| sm在线观看| 亚洲电影欧美电影有声小说| 91麻豆精品91久久久久同性| 久久国产免费观看| 日韩在线高清| 国产羞羞视频在线观看| 亚洲欧美tv| aaaaa黄色片| 日本伊人久久| 亚洲精品一卡二卡三卡四卡| 国产精品三级久久久久久电影| 国产精品毛片一区二区在线看舒淇| 国产精品久久久久久影视| 麻豆网站免费在线观看| 色偷偷888欧美精品久久久| 丰满大乳少妇在线观看网站| 国产黄色小视频网站| 亚洲国产精品va在线看黑人动漫| 在线看无码的免费网站| 久久亚洲人体| 日本高清久久天堂| 最新精品国偷自产在线| 美女国产一区二区| 欧美性xxxxxbbbbbb精品| 日韩欧美一级在线播放| 综合激情成人伊人| 狠狠入ady亚洲精品经典电影| 波多野结衣xxxx| 日韩欧美手机在线| 日韩欧美一区二区在线视频| 精品欧美一区二区三区精品久久| 国产三级精品在线观看| 91精品视频网| 少妇激情综合网| 男女啪啪免费视频网站| 久久亚洲中文字幕无码| 好吊的妞视频这里都有| 日韩三级电影免费观看| 国产精品久久久久久久午夜| 97成人精品区在线播放| 免费大秀视频在线播放| 精品久久蜜桃| 欧美一区二区三区视频免费播放| 欧美性猛交99久久久久99按摩| 成人永久看片免费视频天堂| 一级网站免费观看| 国产高潮视频在线观看| 久久一区二区三区国产精品| 色综久久综合桃花网| 99re66热这里只有精品3直播| 久久亚洲精选| 国产高清av片| 国产18精品乱码免费看| 91最新网址| 影音先锋男人资源站| 欧美日本一区二区高清播放视频| 免费国产在线视频| 久久亚洲综合色一区二区三区| 亚洲天堂久久新| 欧美色视频日本高清在线观看| 91精品国产高清自在线| 在线免费观看国产精品| 91tv国产成人福利| 97超碰人人看人人| 欧美精品激情视频| 性高潮久久久久久久久| 久久99精品久久久久久欧洲站| 久久午夜老司机| 国产视频三区四区| 91小视频在线免费看| 日韩精品久久久久久| 欧美日韩电影在线观看| 99re8这里只有精品| 天堂资源在线| 欧美xxxx日本和非洲| hs网站在线观看| 国产免费一区二区三区视频| 淫视频在线观看| 国产成人三级一区二区在线观看一| 久久99国产精品免费网站| 中文字幕在线看人| 玖玖在线视频| 亚洲视频久久久| а√在线中文网新版地址在线| 中文一区一区三区高中清不卡免费| 免费视频亚洲| 欧美一级日韩不卡播放免费| 国产精品亚洲欧美日韩一区在线| 奶水喷射视频一区| 夜夜操 天天摸| 500福利第一精品导航| 国产在线精品国自产拍免费| 成人免费一区二区三区牛牛| 扒开腿狂躁女人爽出白浆2| 两个人免费视频观看日本| 涩涩视频在线观看免费| 久久狠狠高潮亚洲精品| 国产大片精品免费永久看nba| 最近中文字幕免费mv视频多少集| 日韩欧美亚洲一区二区三区| 日本久久久久久久久久久久| 波多野结衣的一区二区三区| 亚洲精品无码一区二区| 日韩专区av| 国产三级视频| 国产精品久久| 国产成人亚洲综合a∨婷婷| 亚洲精品国产品国语在线app| 国产综合亚洲精品一区二| 貂蝉被到爽流白浆在线观看| 欧美激情亚洲国产| 正在播放国产精品| 草草影院在线观看| 亚洲高清免费观看高清完整版在线观看| 国产亚洲一二三区| 亚洲图片欧美另类| 久热在线视频观看| 日本精品在线观看视频| 亚洲加勒比久久88色综合| 精品国产av无码| 日韩激情啪啪| 国产精品大尺度| 日本加勒比高清在线| 337p日本欧洲亚洲大胆张筱雨| 91福利在线免费| 国产精品久久久久久久免费观看| 日韩欧美在线综合网| 99热这里只有精品9| 国产欧美一区二区视频| 国产亚洲精品一区二区在线观看| 95视频在线观看| 欧美综合激情|