下载带有angular 7的二进制文件-获取损坏的文件

时间:2019-01-30 09:04:36

标签: angular express binary corrupt

我正在尝试使用Angular 7实现简单的下载功能,但是我的文件损坏了。

文件(jpg,pdf,zip文件)托管在云中,我正在使用Express Server和以下代码来获取它:

   var url = getBaseUrl() + '/files/' + filename;
   cloudGet(url, getHeaders(req), function (err, file) {
    if (err) {
      ...
    } else {
      res.setHeader('Content-disposition', 'attachment');
      res.setHeader('Content-type', 'application/octet-stream');
      res.setHeader('Content-Transfer-Encoding', 'binary');
      res.end(file, 'binary');
    }
  });

我正在获取的文件头看起来还不错,所以我认为这部分工作正常。

在Angular中,我有以下代码: 对于获取文件的服务,我尝试了以下解决方案:

downloadResource(path: string) {
 return this.httpClient.get(path, {responseType: 'blob'});
}

我也尝试了以下解决方案:

downloadResource2(path: string): Observable<Blob> {
 return this.httpClient.get<Blob>(path,
  { headers: new HttpHeaders({
     'accept': 'application/octet-stream',
     'content-type': 'application/json'}),
    responseType: 'blob' as 'json'
  });
 }

在我的组件中,我有以下代码:

downloadFile(filename: string) {
 const downloadUrl = this.apiUrl + '&' + 'filename=' + filename;

 this.apiService.downloadResource(downloadUrl).subscribe(data => {
  const blob = new Blob([data], {type: 'application/octet-stream'});
  const downloadURL = window.URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = downloadURL;
  link.download = filename;
  link.click();
 });
}

这会将文件下载到我的下载文件夹中,但是所有文件均已损坏(.json文件除外)。 pdf打开,但为空。 我想念什么吗?

1 个答案:

答案 0 :(得分:0)

我解决了将express中的代码更改为以下问题:

var url = getBaseUrl() + '/files/' + filename;
  request({
      method: "GET",
      url: url,
      headers: getHeaders(req)
  }).pipe(res);