Файл сохранения Angular 7 File Saver с закодированным байтовым массивом вместо преобразования его в формат CSV - PullRequest
0 голосов
/ 22 января 2019

Я использую file saver в Angular 7 для сохранения CSV-файла, возвращенного из бэкэнда Spring Boot. 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 голосов
/ 22 января 2019

Часть проблемы была с преобразованием Base64 по Angular. Когда byte[] данные получены из Spring, 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 });
      });
  }
...