正在使用html 5和java脚本库开发离线应用程序。 我的系统用于离线数据收集。数据以文本格式存储在本地计算机中,然后再与服务器同步。 在我开发相同的应用程序但使用银灯之前,出于安全原因使用
来轻松备份数据任何有关如何备份文本文件并将其压缩到我的硬盘的想法都将受到高度赞赏。
到目前为止,我还没有通过我的研究找到一个可靠的答案 提前谢谢。答案 0 :(得分:3)
我能想到的一个“解决方案”是,在用户使用关闭按钮关闭应用程序之前,您可以检测到window.onbeforeunload
事件并将数据发送到服务器进行保存。但这不可靠,因为可能存在浏览器崩溃或用户可能强行关闭浏览器应用程序的情况。或者最糟糕的是,如果你经常使用localStorage,并且用户清除浏览数据(包括localStorage),它将会消失。
但假设您掌握了数据,可以使用POST
将其发送到服务器并制作脚本以将其保存在磁盘中。显然,您可能希望对文件大小施加限制并强制执行其他安全限制。
假设您为每个唯一身份用户创建了一个文件夹,并且每个用户文件夹中的所有文件都保证唯一命名。在PHP中,您可以使用file_put_contents()
之类的函数来保存文本文件,也可以使用ZipArchive
类轻松地将其压缩。
建议不要将此类数据直接存储到驱动器中。我强烈建议您将localStorage数据放在某种数据库中并进行数据库备份,而不是备份单个用户的数据。
正如其他用户指出的那样,您也可以查看HTML5文件API。示例here。
答案 1 :(得分:1)
我找到了一个如何备份本地存储文件并将其压缩到本地驱动器而无需任何服务器代码的解决方案。下面是一个代码片段,至少现在对我来说很好。任何修改和改进都将受到高度赞赏。
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" }));
}
}