使用FileSaver和Blob将响应正文另存为文件

时间:2018-08-29 13:12:00

标签: angular blob

我想从api下载并保存文件。我的文件名为text.txt,但保存的文件名为:_text.txt_,该文件的内容为:[object Object]

这是我下载文件的功能:

const options = {
      headers: new HttpHeaders().append('Authorization', this.oAuthService.getAccessToken()),
      params: new HttpParams().append('responseType', 'text'),
      observe: 'response' as 'response'
    }

    return this.http.get(this.fileServerUrl + 'file/download/' + filename + '/' + version, options)
      .subscribe(
        resp => { this.saveToFileSystem(resp)

      });
  }

  private saveToFileSystem(response) {
    const contentDispositionHeader: string = response.headers.get('Disposition');
    const parts: string[] = contentDispositionHeader.split(';');
    const filename = parts[1].split('=')[1];
    filename.replace(/"/g, '');
    console.log(filename);
    console.log(response.body)
    const blob = new Blob([response.body], { type: 'text/plain' });
    saveAs(blob, filename);
  }

第一个console.log的输出是text.txt,response.body的console.log是:这是一个测试文本。

为什么保存的文件名开头和结尾都是_,而内容不是响应正文中的文本。

感谢前进

1 个答案:

答案 0 :(得分:0)

尝试一下:

const blob = new Blob([JSON.stringify(response.body)], { type: 'text/plain' });

对于_text.txt_: 字符串是不可变的类型。所以filename.replace ...不会更改文件名的值,它会返回新值。 您必须创建新变量:

const newFileName = filename.replace(/"/g, '');
...
saveAs(blob, newFileName);

或仅将filename.replace(/"/g, '')放入saveAs

saveAs(blob, filename.replace(/"/g, ''));