【问题标题】:Save a response body as file with FileSaver and blob使用 FileSaver 和 blob 将响应正文另存为文件
【发布时间】:2019-02-04 07:03:19
【问题描述】:

我想从 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是:this is a test text..

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

提前致谢

【问题讨论】:

  • 您可以在问题中附上您面临的问题,以便更清楚地了解您寻求帮助解决什么

标签: angular blob


【解决方案1】:

试试这个:

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

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

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

或者只是将filename.replace(/"/g, '') 放入saveAs

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

【讨论】:

    猜你喜欢
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2011-07-12
    相关资源
    最近更新 更多