83 lines
2.4 KiB
JavaScript
83 lines
2.4 KiB
JavaScript
class ImageStore {
|
||
constructor(dbName = 'imageDatabase', storeName = 'images') {
|
||
this.dbName = dbName;
|
||
this.storeName = storeName;
|
||
this.db = null;
|
||
}
|
||
|
||
// 初始化IndexedDB数据库
|
||
async initDB() {
|
||
return new Promise((resolve, reject) => {
|
||
const request = window.indexedDB.open(this.dbName, 1);
|
||
|
||
request.onupgradeneeded = (event) => {
|
||
const db = event.target.result;
|
||
if (!db.objectStoreNames.contains(this.storeName)) {
|
||
db.createObjectStore(this.storeName, { keyPath: 'url' });
|
||
}
|
||
};
|
||
|
||
request.onsuccess = (event) => {
|
||
this.db = event.target.result;
|
||
resolve(this.db);
|
||
};
|
||
|
||
request.onerror = (event) => {
|
||
console.error("Error opening IndexedDB:", event);
|
||
reject(event);
|
||
};
|
||
});
|
||
}
|
||
|
||
// 存储Base64图片
|
||
async storeImage(url, base64Data) {
|
||
return new Promise(async (resolve, reject) => {
|
||
if (!this.db) {
|
||
await this.initDB();
|
||
}
|
||
|
||
const transaction = this.db.transaction([this.storeName], 'readwrite');
|
||
const store = transaction.objectStore(this.storeName);
|
||
|
||
const request = store.put({ url, base64Data });
|
||
|
||
request.onsuccess = () => {
|
||
resolve(true);
|
||
};
|
||
|
||
request.onerror = (event) => {
|
||
console.error("Error storing image:", event);
|
||
reject(event);
|
||
};
|
||
});
|
||
}
|
||
|
||
// 根据URL获取Base64图片
|
||
async getImage(url) {
|
||
return new Promise(async (resolve, reject) => {
|
||
if (!this.db) {
|
||
await this.initDB();
|
||
}
|
||
|
||
const transaction = this.db.transaction([this.storeName], 'readonly');
|
||
const store = transaction.objectStore(this.storeName);
|
||
|
||
const request = store.get(url);
|
||
|
||
request.onsuccess = (event) => {
|
||
const result = event.target.result;
|
||
if (result) {
|
||
resolve(result.base64Data);
|
||
} else {
|
||
resolve(null); // 如果没有找到图片,返回null
|
||
}
|
||
};
|
||
|
||
request.onerror = (event) => {
|
||
console.error("Error retrieving image:", event);
|
||
reject(event);
|
||
};
|
||
});
|
||
}
|
||
}
|