如何检测角度下载的文件?

时间:2019-01-28 09:54:30

标签: angular file browser download

我在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)
        )
      }      
    )
 }

1 个答案:

答案 0 :(得分:0)

  1. 用户点击了应该开始下载文件的链接。
  2. JS客户端(有角)将AJAX请求发送到服务器。
  3. 服务器生成downloadId,并进入客户端会话(在服务器端){downloadInfo:{downloadId:123,状态:ID_REQUESTED}},并以downloadId进行响应。
  4. JS-client通过downloadId生成downloadUrl,并在新窗口/选项卡中打开它,以便浏览器可以开始下载。
同时

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状态:

  • 保留lastAccessTime: 'downloadInfo:{downloadId123:{状态:ID_REQUESTED,lastAcccessTime:123456789123456789},downlaodId124:{...}}'
  • 在某些时候删除陈旧的项目,例如服务器访问用户的downloadInfo时。
相关问题