2015-04-14 57 views
4

我有一个科尔多瓦SQLite插件的问题。科尔多瓦SQLite保存BLOB

如何将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

您无法将JavaScript Blob对象保存到SQLite插件。它不支持Blob格式。是的,我知道它有一个BLOB类型,但令人困惑的是它不是一回事。 :)

WebSQL/SQLite插件不支持二进制字符串作为Blob的替代。但是,您可能会遇到问题,因为在iOS和Android上都存在大量错误(some details are here)。

在PouchDB中,我们解决了这些问题,因此附件API会为您抽象出所有内容。按照PouchDB attachment guide,它会为您转换Blob并将它们存储在数据库中。如果你想Blob和二进制字符串或其他各种格式之间进行转换,检查出blob-util

/* 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'); 
} 

:要创建一个可与SQLite的插件一个PouchDB,你需要做到以下几点。

+0

索引分贝在Windows Phone上工作? – ShrekOverflow

+0

yes http://caniuse.com/#feat=indexeddb – nlawson

+0

由于某些原因,WWAHost无法检查IndexedDB: - / – ShrekOverflow

2

您可以使用blob literalshex函数将blob值视为SQL和JavaScript之间的接口上的十六进制字符串,这很好。

+0

你能解释一下吗?当我获得javascript BLOB对象时,我该怎么处理他?对于愚蠢的问题抱歉,但我对这个问题有点困惑。 – ArtemKh

0

我的建议是将图片简单地存储为平面文件,当然有唯一的文件名,并将引用存储在您的sqlite数据库中。