2010-07-31 54 views
3

好吧,我正在通過xhr下載數據塊,並且我希望將其存儲在本地以用於擴展chrome。將二進制數據作爲字符串存儲在Web Sql數據庫中

起初我能夠將它存儲在localStorage中,但後來我需要移動到localStorage無法處理的較大的塊。因此我決定將它存儲在Web Sql Database中。但是,我能夠將數據完全保存在localStorage中,但是當我嘗試將其存儲在數據庫中時,數據丟失或出現錯誤。

像這樣:

//this way the data gets lost because it is filtered to prevent SQL injection attacks 
tx.executeSql('INSERT INTO files (id, content) VALUES (?,?)', [fileID,file]); 

//this method gives an error (unrecognized token) because the data contains byte values in the string 
tx.executeSql('INSERT INTO files (id, content) VALUES (?, "' + file + '")', [id]); 

我能想到得到的數據到數據庫的唯一另一種方式是通過使用btoa(file),和它的作品,但我認爲業績將相當可觀命中每次數據存儲/使用時必須執行btoa/atob

所以我的問題是,如何在不使用btoa的情況下將數據存儲在數據庫中,或者如果btoa使用多少性能不可能?

我也很確定localStorage使用SQLite以及Web Sql數據庫,所以爲什麼我不能像localStorage那樣簡單地將數據放在後者中?

回答

0

看看這樣的事情,你需要base64編碼二進制數據,因爲它需要是可打印的字符。

http://www.webtoolkit.info/javascript-base64.html

它將導致在二進制數據的大小雖然大約增加四倍。

你需要它編碼爲十六進制我相信,也許,使用SQLite

tx.executeSql('INSERT INTO files (id, content) VALUES (2, "0xBADF00D12840F32");'); 

例如,後者SQLite的方法很可能是更有效的來表示二進制數據。

相關問題