Angular 6: загрузка файла после получения объекта File с внутреннего сервера - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть объект типа File структуры {type: "Buffer", data: Array (702549)}, что мне нужно сделать в angular 6, чтобы загрузить этот файл в браузере?

Я получаю ответ от этой функции:

  getMarketingProposalById(id: string): Observable<MarketingProposal> {
    return this.httpClient.get<MarketingProposal>(this.apiUrl  + id , this.httpOptions).pipe(map(marketingProposal => {
      if (marketingProposal.materials[0] && marketingProposal.materials[0].file) {
        const blob = new Blob([marketingProposal.materials[0].file.data], { type: 'image/png' });
        console.log(blob);
        // saveAs(blob, 'hello.png');
      }
      const marketingProposalObject = this.assignMarketingProposalObject(marketingProposal);
      this.mapStringToDate(marketingProposalObject);
      return marketingProposalObject;
    }));
  }

marketingProposal.materials [0]. Файл имеет формат {тип: «Буфер», данные: массив (702549)}

1 Ответ

0 голосов
/ 11 сентября 2018

Вы можете использовать файл-заставку для этого: https://www.npmjs.com/package/file-saver

Код загрузки файла:

import { saveAs } from 'file-saver';

loadFile(fileId: number) {
   try {
       let isFileSaverSupported = !!new Blob;
   } catch (e) { 
       console.log(e);
       return;
   }

   this.repository.loadFile(fileId).subscribe(response => {
       let blob = new Blob([response.data], { type: 'application/pdf' });
       saveAs(blob, `file${fileId}.pdf`);
   });
}

UPDATE: Я создал тестовый проект в соответствии с условиями нагрузки:

http.get('http://localhost:4200/assets/image.png', {responseType: 'blob'}).subscribe(response => {
  try {
      let isFileSaverSupported = !!new Blob;
  } catch (e) { 
      console.log(e);
      return;
  }
  let blob = new Blob([response], { type: 'image/png' });
  saveAs(blob, `file.png`);
});
...