下载文件时在文件内容中获取类型 [object object],而不是使用 angular 7 获取 blob

Posted

技术标签:

【中文标题】下载文件时在文件内容中获取类型 [object object],而不是使用 angular 7 获取 blob【英文标题】:getting type [object object] in file content while downloading file, instead of blob using angular 7 【发布时间】:2020-09-01 11:25:15 【问题描述】:

使用 Angular 7,我通过 get 方法调用 API,并尝试使用 fileSaver 库中的“saveAs”函数下载文件。

当我从响应标头获取文件名时,无法下载正确的文件并在文件内容中获取 [Object object],但无论何时使用虚拟名称,它都可以正常工作。

它是组件文件:

         fileName:string="";
         const MIME_TYPE =
         XLSX:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
         TXT:'text/*',
         PDF:'application/pdf'
         
         downloadFile()
           this.DownloadService.downloadFile(
          (data: any) => 
           this.fileName=data.headers.get('fileName');
            const EXT = this.fileName.substr(this.fileName.lastIndexOf('.')+1);
            saveAs(new Blob([data],type:MIME_TYPE[EXT]),this.fileName);
          
        );
    

下载服务文件

  public downloadFile(callback: (responseData: any) => void): void 
        this.apiService.downloadFile.subscribe((data: any) => 
          if (callback) 
            callback(data);
          
        );
      

api服务文件

  downloadFile(param: any): Observable<any> 
          return this.http.get(api/download, responseType:'blob',observe: 'response' );
        

在文件内容中输出

[Object object]

【问题讨论】:

【参考方案1】:

所以有几点需要考虑。

    在某些情况下,如果 blob 类型是 html/TXT,您可能需要在创建新 Blob 之前对二进制数据使用 JSON.Stringify()。

    如果您使用 Base 64 编码,则需要在服务器上进行编码并在前端解析响应(代码在此处)。

export const base64ToArrayBuffer = (base64) => 
    const binaryString = window.atob(base64);
    const bytes = new Uint8Array(binaryString.length);
    return bytes.map((byte, i) => binaryString.charCodeAt(i));
;
    要考虑的另一件事是返回文件的服务器发送的标头。某些 HTTP 请求可能未设置为正确处理响应,并且可能发送不正确的标头。像 Axios 这样的包依赖这些标头来正确解析响应。为防止这种断开连接,您可能需要将“responseType”设置为“blob”。

希望这对来自未来的任何时间旅行者有所帮助。

【讨论】:

以上是关于下载文件时在文件内容中获取类型 [object object],而不是使用 angular 7 获取 blob的主要内容,如果未能解决你的问题,请参考以下文章

在 Objective C 中获取文件的内容类型

当用户尝试下载文件时在 pdf 文件上应用水印

事件类型

如何在上传文件时在Struts2中保存文件的原始名称

怎么获取oss文件object的uri

添加参考时在设计时更新配置文件