我正在使用 html 5 和 java 脚本库开发离线应用程序。我的系统用于离线数据收集。数据以文本格式存储在本地计算机中,然后稍后同步到服务器。在我开发相同的应用程序但使用 Silver Light 之前,出于安全原因,使用 Silver Light 很容易备份数据
任何关于如何备份文本文件并将它们压缩到我的硬盘的想法将不胜感激。
到目前为止,我还没有通过我的研究找到一个可靠的答案提前谢谢。
我正在使用 html 5 和 java 脚本库开发离线应用程序。我的系统用于离线数据收集。数据以文本格式存储在本地计算机中,然后稍后同步到服务器。在我开发相同的应用程序但使用 Silver Light 之前,出于安全原因,使用 Silver Light 很容易备份数据
任何关于如何备份文本文件并将它们压缩到我的硬盘的想法将不胜感激。
到目前为止,我还没有通过我的研究找到一个可靠的答案提前谢谢。
我能想到的一个“解决方案”是,在用户使用关闭按钮关闭应用程序之前,您可以检测到window.onbeforeunload
事件并将数据发送到您的服务器进行保存。但这并不可靠,因为可能存在浏览器崩溃或用户可能强行关闭浏览器应用程序的情况。或者最糟糕的是,如果您经常使用 localStorage,并且偶然用户清除了浏览数据(包括 localStorage),它将消失。
但是假设您手头有数据,您可以使用将其发送到服务器POST
并制作脚本将其保存在磁盘中。显然,您可能希望对文件大小施加限制并实施其他安全限制。
假设您为每个唯一用户创建了一个文件夹,并且每个用户文件夹中的所有文件都保证被唯一命名。在 PHP 中,您可以使用诸如file_put_contents()
保存文本文件之类的功能,也可以使用ZipArchive
该类轻松压缩它。
不建议将此类数据直接存储到驱动器中。我强烈建议您将 localStorage 数据放在某种数据库中并进行数据库备份,而不是备份单个用户的数据。
正如其他用户指出的那样,您还可以查看 HTML5 File 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" }));
}
}