如何检测以编程方式触发的客户端“下载”是否失败?

时间:2017-06-26 22:27:20

标签: javascript html5 download

设置

我有一个主要离线的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.");
}

问题

现在,此下载是我的应用工作流程的重要部分。启动后“下载”成功很重要,否则用户可能会失去很多工作。

我可以“等待”下载完成然后再继续下载,只要用户收到失败通知,如果下载失败就绝对没问题。

有没有办法确保文件已完成“下载”或检测文件是否“失败”?(除了要求用户自己查看,从视角来看这不是一个选项我们的工作流程)

为什么不将数据存储在服务器上?

  • 因为我的应用应该离线工作,数据可能很大(即几GB)。

为什么不将数据保存在例如localStorageIndexedDB

  • 在此处存储数据将累积,如果用户开始耗尽可用空间,浏览器将越来越可能删除它。此“另存为”功能实际上是从localStorage和IndexedDB中提取数据,以便永久存储在用户的设备上。

为什么不使用像Detect when browser receives file download这样的解决方案?

  • 因为这些答案都假定在线应用模型包含始终可用的服务器,而我的应用程序甚至需要在离线状态下工作,并且还保存仅存在于应用程序内存中的文件。

0 个答案:

没有答案