Cordova SQLite保存BLOB

时间:2015-04-14 09:20:15

标签: javascript sqlite cordova blob ionic

我对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字符串非常庞大。 (它适用于小图像)

请帮助我,抱歉我的英语。

4 个答案:

答案 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 literalshex函数将blob值视为SQL和JavaScript之间接口的十六进制字符串,这样可以正常工作。

答案 2 :(得分:2)

你的图像有多大?我已经构建了一个将图像保存到应用数据库的应用,请参阅此inventory-service。我使用PouchDB和客户base64-service。 您还可以在official stores

中找到该应用

答案 3 :(得分:0)

我的建议是将图片存储为平面文件,当然还有唯一的文件名,并将参考存储在sqlite数据库中。