我对Cordova SQLite插件有疑问。
如何将BLOB图像保存到SQLite?
我在JS中有BLOB对象:
Blob:{
size: 96874
type: "image/jpeg"
__proto__: Blob
length: 1}
我试图保存它
INSERT INTO images (img) VALUES (?);
当我试图获得这张图片时:
SELECT img FROM images
我收到这个字符串:
img: "{"type":"image\/jpeg","size":96874}"
我怎样才能将它再次转换为BLOB?
此外,我尝试在base64中保存图像,但我无法将大图像保存到SQLite,因为base64字符串非常庞大。 (它适用于小图像)
请帮助我,抱歉我的英语。
答案 0 :(得分:4)
您无法将JavaScript Blob对象保存到SQLite插件。它不支持Blob格式。是的我知道它有一个BLOB
类型,但令人困惑的是它不是一回事。 :)
WebSQL / SQLite插件确实支持二进制字符串作为Blob的替代方法。但是,您可能遇到问题,因为iOS和Android(some details are here)上的实现中存在大量错误。
在PouchDB中,我们解决了这些问题,因此附件API会为您提取所有内容。按照PouchDB attachment guide,它将为您转换Blob并将它们存储在数据库中。要创建与SQLite插件对话的PouchDB,您需要执行以下操作:
/* prefer websql, which will actually use the SQLite Plugin if available */
var db = new PouchDB('mydbname', {adapter: 'websql'});
if (!db.adapter) {
/* fall back to IndexedDB for FirefoxOS, Windows Phone, etc. */
db = new PouchDB('mydbname');
}
如果您想在Blob和二进制字符串或各种其他格式之间进行转换,请查看blob-util。
答案 1 :(得分:2)
您可以使用blob literals和hex函数将blob值视为SQL和JavaScript之间接口的十六进制字符串,这样可以正常工作。
答案 2 :(得分:2)
答案 3 :(得分:0)
我的建议是将图片存储为平面文件,当然还有唯一的文件名,并将参考存储在sqlite数据库中。