将二进制数据作为字符串存储在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的方法很可能是更有效的来表示二进制数据。