PouchDB的图片存储技术

/*

*参数

* db:已建或未建数据库

* pouchId:数据库唯一的主键_id

* src: 图片img的DOM对象

* bg: 判断是否是背景图

* */

varaddTodo=function(db,ary) {

ary.forEach(function(e) {

console.log(e)

//查询数据库中是否有该文档 根据主键pouchId查询

db.get(e.pouchId).then(function(doc) {//查询数据库中该主键_id的文档信息

// handle doc

varimgBlob=doc.imgFile// blob图片对象

console.log(imgBlob)

//判断是否存在该图片对象Blob

if(imgBlob) {

//传入blob对象dom对象

showImg(imgBlob,e.src,e.bg);

}else{

getByRequest(db,e.pouchId,e.src);

}

}).catch(function(err) {

console.log(err);

console.log('查询失败,进行创建')//文档查询失败

//新建文档

db.put({

_id:e.pouchId

}).then(function(response) {

// handle response

console.log('创建成功')

}).catch(function(err) {

console.log(err);

});

});

})

}

//传入blob对象 显示图片

functionshowImg(imgFile,src,bg) {

console.log("showImg"+imgFile);

// Get window.URL object

varURL=window.URL||window.webkitURL;

// Create and revoke ObjectURL

//利用blob对象 创建一个URL对象

varimgURL=URL.createObjectURL(imgFile);

// Set img src to ObjectURL

//获取图片的dom对象 并将URL设置为该对象的SRC

varimgElephant=document.getElementById(src);

if(!bg){

imgElephant.setAttribute("src",imgURL);

}else{

imgElephant.style.background="url("+imgURL+")";

}

// Revoking ObjectURL

//当图片加载完成后

//使用URL.revokeObjectURL()方法释放之前创建的URL对象

imgElephant.onload=function() {

window.URL.revokeObjectURL(this.src);

}

}

//当数据库查询主键 无该图片数据时 通过项目自身存储图片blob

functiongetByRequest(db,pouchId,src) {

// Create XHR

varxhr=newXMLHttpRequest(),//创建XMLHttpRequest对象  目前请求项目自身

blob;

xhr.open("GET",pouchId,true);//在项目中get请求该图片

// Set the responseType to blob

//将响应类型设为blob类型

xhr.responseType="blob";

//响应加载

xhr.addEventListener("load",function() {

//响应为200请求完成

if(xhr.status===200) {

console.log("Image retrieved");

// Blob as response

blob=xhr.response;// blob对象为响应后的对象

console.log("Blob:"+blob);

//获得blob图片信息  存入pouchDB文档

save(db,blob,pouchId);

//从pouchDB查询该文档

showImg(blob,src);

}

},false);

// Send XHR

xhr.send();

}

//根据blob对象为keyPath更新键值

functionsave(db,blob,pouchId) {

//根据主键_id查询文档 并追加文档imgFile内容 更新版本号_rev

db.get(pouchId).then(function(doc) {

returndb.put({

_id:pouchId,

_rev:doc._rev,

imgFile:blob

});

}).then(function(response) {

// handle response

console.log('图片存储成功')

console.log(response)

}).catch(function(err) {

console.log(err);

});

}

module.exports=addTodo;

你可能感兴趣的:(PouchDB的图片存储技术)