将二进制数据作为字符串存储在Web Sql数据库中

问题描述:

好吧,我正在通过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那样简单地将数据放在后者中?

看看这样的事情,你需要base64编码二进制数据,因为它需要是可打印的字符。

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

它将导致在二进制数据的大小虽然大约增加四倍。

你需要它编码为十六进制我相信,也许,使用SQLite

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

例如,后者SQLite的方法很可能是更有效的来表示二进制数据。