我有一个主要离线的Electron / web混合应用程序,在某些时候,需要一个可靠的“另存为”功能。在浏览器中,我通过以编程方式触发带有HTML5下载属性的<a>
上的点击来实现此功能:
let anchor = document.createElement("a");
let href = window.URL.createObjectURL(new Blob([fileContents]));
anchor.href = href;
anchor.download = settings.defaultFilename;
anchor.click();
然后由浏览器及其设置如何执行“另存为”功能本身,有些将显示“另存为”对话框,有些会直接下载到用户的“下载”文件夹而不会询问。
当然,我正在对显然不支持download
属性的浏览器进行初步检查,并在应用启动时显示明确警告,例如:
if (typeof anchor.download === "undefined") {
throw new Error("Your browser does not support saving your project.");
}
现在,此下载是我的应用工作流程的重要部分。启动后“下载”成功很重要,否则用户可能会失去很多工作。
我可以“等待”下载完成然后再继续下载,只要用户收到失败通知,如果下载失败就绝对没问题。
有没有办法确保文件已完成“下载”或检测文件是否“失败”?(除了要求用户自己查看,从视角来看这不是一个选项我们的工作流程)
为什么不将数据存储在服务器上?
为什么不将数据保存在例如localStorage
和IndexedDB
?
为什么不使用像Detect when browser receives file download这样的解决方案?