2015-04-14 56 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數據庫中。