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)を実行する必要がある場合、パフォーマンスはかなりの打撃を受けると考えています.btoaatob

だから私の質問は、を使用せずにデータベースにデータを保存する方法btoa、またはそれが不可能な場合、どのくらいのパフォーマンスがbtoa使用されるかということです。

localStorageまた、SQLite と Web Sql データベースを使用していることもかなり確信していlocalStorageます。

4

1 に答える 1

0

このようなものを見てください。印刷可能な文字である必要があるため、バイナリデータをbase64でエンコードする必要があります。

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

ただし、バイナリ データのサイズは約 4 倍になります。

おそらく、SQLiteを使用してバイナリデータを表すには、16進数としてエンコードする必要があります

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

たとえば、後者の SQLite メソッドはおそらくより効率的です。

于 2011-09-22T22:31:55.670 に答える