Angular 7 File Saver用编码的字节数组保存文件,而不是将其转换为CSV格式

时间:2019-01-22 18:14:53

标签: angular filesaver.js

我在Angular 7上使用file saver来保存从Spring Boot后端返回的CSV文件。 Spring Boot返回具有某些属性的CSV File对象,即字节数组格式的名称,大小,类型和文件内容。当我打开保存页面时,File Saver会使用字节数组文本保存文件,而不是转换为CSV格式并将其保存到文件中。

getFileContent

getFileContent(id)
  {
    this.filesService.getFileContent(SERVER_API_URL + "files/" + id).subscribe(
      data =>
      {
        this.fileObservable = data;
        let blob = new Blob([this.fileObservable.fileContent], {type: "text/csv;charset=utf-8"});
        saveAs(blob, "test.csv",{ autoBOM: true });
      });
  }

其余API:

@GetMapping(value = "/files/{id}")
    public CsvFile getFileById(@PathVariable Long id)
    {
        return csvUploadService.getFileById(id);
    }

1 个答案:

答案 0 :(得分:0)

部分问题是Angular进行了Base64转换。当从Spring收到byte[]数据时,Angular将其转换为Base64字符串。我曾经blob-util将Base64字符串转换为byte [],然后将其传递给File-Saver。更新代码如下

getFileContent

 getFileContent(id)
  {
    this.filesService.getFileContent(SERVER_API_URL + "files/" + id).subscribe(
      data =>
      {
        this.fileObservable = data;
        let contentType='text/csv';
        let blob = base64StringToBlob(this.fileObservable.fileContent, contentType);
        saveAs(blob, "test.csv",{ autoBOM: true });
      });
  }