5

HTML 5 と Java スクリプト ライブラリを使用してオフライン アプリケーションを開発しています。私のシステムはオフライン データ収集用です。データは、後でサーバーに同期される前に、テキスト形式でローカル マシンに保存されます。同じアプリケーションを開発する前に、セキュリティ上の理由からデータを簡単にバックアップできるシルバーライトを使用していました

テキストファイルをバックアップしてハードディスクに圧縮する方法についてのアイデアは大歓迎です。

これまでの調査では、確固たる答えが見つかりませんでした。

4

2 に答える 2

3

私が考えることができる1つの「解決策」は、ユーザーが閉じるボタンを使用してアプリを閉じる前に、window.onbeforeunloadイベントを検出し、データをサーバーに送信して保存することです。ただし、ブラウザーがクラッシュしたり、ユーザーがブラウザー アプリケーションを強制的に閉じたりする場合があるため、これは信頼できません。または、最悪の場合、常に localStorage を使用していて、ユーザーがブラウジング データ (localStorage を含む) を偶然消去した場合、データは失われます。

ただし、手元にデータがあると仮定すると、それをサーバーに送信しPOST、ディスクに保存するスクリプトを作成できます。当然ながら、ファイル サイズに制限を課したり、その他のセキュリティ制限を適用したりすることもできます。

警告: PHP

一意のユーザーごとに作成されたフォルダーがあり、各ユーザーのフォルダー内のすべてのファイルに一意の名前が付けられることが保証されているとします。PHP では、テキスト ファイルを保存するような関数を使用できます。また、クラスfile_put_contents()を使用して簡単に ZIP することもできます。ZipArchive

この種のデータをドライブに直接保存することはお勧めしません。個々のユーザーのデータをバックアップする代わりに、localStorage データをある種のデータベースに入れ、データベースのバックアップを行うことを強くお勧めします。

他のユーザーが指摘しているように、HTML5 ファイル API も参照できます。ここに例があります。

于 2013-07-12T07:11:08.943 に答える
2

サーバーコードなしで、ローカルストレージファイルをバックアップしてローカルドライブに圧縮する方法に関する解決策を見つけました。以下は、少なくとも今のところは問題なく動作するコード スニペットです。変更や機能強化は高く評価されます。

if (localStorageKeys.length > 0) {
    for (var i = 0; i < localStorageKeys.length; i++) {
        var key = localStorageKeys[i];
        if (key.search(_instrumentId) != -1) {
            keysToBackup.push(key);
            var data = localStorage.getItem(localStorageKeys[i]);
            zip.file(localStorageKeys[i].slice(0, -19) + ".txt", data);
        }
        else {
            keysNotToBackup.push(key);
        }
        var datafile = document.getElementById('backupData');
        datafile.download = formName + "_Data.zip";
        datafile.href = window.URL.createObjectURL(zip.generate({ type: "blob" }));

    }
}
于 2013-08-06T14:08:29.393 に答える