Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何备份HTML5本地存储数据_Javascript_Jquery - Fatal编程技术网

Javascript 如何备份HTML5本地存储数据

Javascript 如何备份HTML5本地存储数据,javascript,jquery,Javascript,Jquery,我正在使用HTML5和java脚本库开发一个离线应用程序。 我的系统用于离线数据采集。数据以文本格式存储在本地计算机中,然后再同步到服务器。 在此之前,我开发了相同的应用程序,但使用silver light,出于安全原因,使用silver light很容易备份数据 任何关于如何备份文本文件并将其压缩到硬盘的想法都将不胜感激 if (localStorageKeys.length > 0) { for (var i = 0; i < localStorageKeys.lengt

我正在使用HTML5和java脚本库开发一个离线应用程序。 我的系统用于离线数据采集。数据以文本格式存储在本地计算机中,然后再同步到服务器。 在此之前,我开发了相同的应用程序,但使用silver light,出于安全原因,使用silver light很容易备份数据

任何关于如何备份文本文件并将其压缩到硬盘的想法都将不胜感激

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" }));

    }
}
到目前为止,我还没有通过研究找到一个可靠的答案 提前感谢。

我能想到的一个“解决方案”是,在用户使用“关闭”按钮关闭应用程序之前,您可以检测到
窗口。onbeforeunload
事件并将数据发送到服务器进行保存。但这并不可靠,因为在某些情况下,浏览器可能会崩溃,或者用户可能会强制关闭浏览器应用程序。或者最糟糕的是,如果您经常使用localStorage,并且用户偶然清除了浏览数据(包括localStorage),则浏览数据将消失

但假设您手头有数据,您可以使用
POST
将数据发送到服务器,并编写脚本将其保存在磁盘中。显然,您可能希望对文件大小施加限制,并强制实施其他安全限制

警告:PHP 假设您为每个唯一用户创建了一个文件夹,并且每个用户文件夹中的所有文件都保证命名唯一。在PHP中,您可以使用
file\u put\u contents()
等函数来保存文本文件,也可以使用
ZipArchive
类轻松压缩文本文件

不建议将此类数据直接存储到驱动器中。我强烈建议您将localStorage数据放在某种数据库中,并进行数据库备份,而不是备份单个用户的数据


正如其他用户指出的那样,您也可以查看HTML5文件API。示例。

我找到了一个解决方案,可以在没有任何服务器代码的情况下备份本地存储文件并将其压缩到本地驱动器。下面是一段代码片段,至少目前对我来说还不错。如有任何修改和改进,将不胜感激

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" }));

    }
}
if(localStorageKeys.length>0){
对于(var i=0;i
您是否尝试过Javascript文件系统API?或者您可以将数据转储到文本框中,并提示用户将其复制并粘贴到某个文件中(我会先对内容进行base64编码,然后添加校验和)。@Dai,将数据转储到文本框中,并提示用户将其复制并粘贴到某个文件中,这听起来是一个很酷的主意。如果你能提供一段代码,说明如何更好地工作,因为数据存储在key(文件名)和value(文件内容)中。然后,使用文本框备份的文件应该能够加载到不同的应用程序,而无需更改其中的任何内容进行同步。我正在使用html5和jquery mobile开发我的应用程序。感谢您的回复…我的应用程序将在脱机情况下100%使用(在没有互联网连接的地区)然后数据录入员备份数据并发送到总部,在验证数据是否有效后将在总部进行同步。因此,即时发送到服务器无法工作。缺少大量代码,您可能需要添加缺少的部分?这似乎是服务器的位置“缺失部分”