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

3

好的,我正在通过xhr下载数据块,并希望将其本地存储为chrome扩展程序。

起初,我能够将其存储在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 Database,那么为什么我不能像使用localStorage那样轻松地将数据放入后者呢?
1个回答

0

看一下这个,你需要对二进制数据进行base64编码,因为它需要成为可打印字符。

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

这将导致二进制数据的大小增加约四倍。

您需要将其编码为十六进制来表示二进制数据使用SQLite

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

例如,后者的SQLite方法可能会更加高效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接