我在angular 7上工作,我在.Net Core API中创建了一个控制器,该控制器在使用时将向用户发送文件,他可以下载该文件。
在我的角度应用程序中,我想知道是否有可能检测到文件下载的不同事件链接。
我在开发人员mozilla上看到了这一点:
function handleChanged(delta) {
if (delta.state && delta.state.current === "complete") {
console.log(`Download ${delta.id} has completed.`);
}
}
browser.downloads.onChanged.addListener(handleChanged);
我尝试在我的角度应用程序中执行此操作,但是此行代码显示一条错误消息:
browser.downloads.onChanged.addListener(handleChanged);
谢谢您的帮助。
编辑:
我的下载服务:
generatePDF(elt){
return this.http.post(`${this.config.catchApiUrl()}PDF`,elt,{responseType : 'blob', reportProgress:true}
);
}
我的下载服务呼叫者:
onFormSubmit() {
this.generateService.eltToGeneratePDF(1).subscribe(
r => {
this.generateService.generatePDF(r)
.subscribe(
r => {
console.log("yeah")
saveAs(r)},
err => console.log(err)
)
}
)
}
答案 0 :(得分:0)
5和6:
5.1。 JS客户端通过某种信息消息“将文件保存在某处”通知用户。
5.2。 JS客户端将AJAX请求发送到服务器“ GET / download / status /?waitForCompletion = yes&timeout = 10000”。
5.3。服务器在用户会话中查找downloadId,检索其状态,然后将状态返回给服务器。如果waitForCompletion = yes,则服务器等待下载完成,但不超过超时毫秒。
6.1。用户按下保存文件,浏览器发送下载URL的请求(“ GET / download / data /”)
6.2。服务器在用户会话'{downloadInfo:{status:IN_PROGRESS}'中修改downloadInfo并开始下载
6.3。下载完成后,服务器将downloadInfo更改为“ {status:COMPLETED}”
5.4。 JS客户端响应“ GET / download / status /检索状态”已完成”
以上版本仅用于单次下载,新下载将覆盖downloadInfo,并且服务器端会话不会因陈旧的下载而受到污染。 如果应用程序应允许下载多个并发文件(并且需要了解每个人的状态),则按超时删除downloadId状态: