【问题标题】:Unable to download blob as file in Angular 7 from API无法从 API 将 blob 作为 Angular 7 中的文件下载
【发布时间】:2019-09-15 19:58:30
【问题描述】:

在我的应用程序中下载文件时遇到了一些问题。为了下载文件,我在用于将数据导入应用程序的 API 中进行了新调用。我已经使用 Postman 测试了这个 API,它似乎可以正常工作,因为我可以通过调用下载文件。

不幸的是,在我的 Angular 应用程序中实现它时遇到了一些问题。当我调用下面的函数时,我得到一个“损坏”的文件,因为它无法打开。我已经检查了与我的问题相关的其他问题/解决方案,但在尝试了大部分之后,我没有进一步了解。

我的服务中的调用:

DownloadFile (companyId: string, fileId: string, extension: string, fileName: string): Observable<Blob> {
   const options = { responseType: 'blob' as 'json' }
   return this.http.get<Blob>(this.baseApiUrl + this.baseTag + "?companyId=" + companyId + "&fileId=" + fileId + "&extension=" + extension + "&fileName=" + fileName, options)
 }

使用服务的调用:

this.data.DownloadFile(this.company.id, selectedItem.id, this.getFileNameWithoutExtension(selectedItem.fileName), this.getExtensionFromFileName(selectedItem.fileName))
    .subscribe(resultBlob => 
      {
        //Success
        console.log('start download:', resultBlob);
        var blob = new Blob([resultBlob], { type: "application/pdf" } );
        saveAs(blob, selectedItem.fileName);
      },
    error => {
      //Error
      console.log(error);
    });

我没有看到我的这部分代码有什么问题。

【问题讨论】:

  • 看起来您在调用 data.DownloadFile() 时翻转了文件名和扩展名参数?另外,我很好奇您为什么要硬设置应用程序类型?
  • 谢谢!我有点太仓促了,参数切换似乎就是这样。如果您将其发布为答案,我会将其标记为正确。硬编码的应用程序类型仅用于测试,它将动态设置,以便可以下载所有存储的文件。
  • 啊,有道理。我还注意到您使用 saveAs - 很好的调用,它在包括 IOS 在内的平台上运行良好。
  • 看到它在另一个帖子中被使用,很高兴知道这是一个不错的选择!

标签: angular api angular-httpclient angular7


【解决方案1】:

DownloadFile()中的参数是:

companyId, fileId, extension, fileName 

但是当您调用服务时,看起来您已将文件名和扩展名参数翻转为:

companyId, fileId, fileName, extension

容易犯错误。 :)

【讨论】:

  • 非常感谢!自己没注意到
猜你喜欢
  • 2020-03-15
  • 1970-01-01
  • 2019-08-03
  • 2018-09-27
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 2019-08-24
  • 1970-01-01
相关资源
最近更新 更多