Как скачать файл в angular cli? - PullRequest
0 голосов
/ 07 мая 2020

У меня проблема при загрузке файла, когда я получаю ответ от бэкэнда, как мне загрузить файл?

Ошибка возникает, когда я хочу получить имя файла

this my .ts:

async download(path: any) {
    const { status, headers, body } = await this.studentService.download(path);
     const filenames = this.Filename(headers);
    const blob = new Blob([body],{type:'application/octet-stream'});
    saveAs(blob, filenames);

  }

  Filename(headers: any) {
    let filenames = '';
    var RGX_FILENAME = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
    const contentDisposition = headers.get('Content-Disposition');
    const matches = RGX_FILENAME.exec(contentDisposition);
    if (matches && matches[1]) {
      filenames = matches[1].replace(/['"]/g, '');
    }
    return filenames;
  }

this my .service:

async download(param: any): Promise<any> {
    const query = this.paramFile(param);
    const result = await this.get(
      `${environment.apiUrl}/file/${query}`
    );
    return result;
  }

  paramFile(param: any) {
    const query = `${param}`;
    return query;
  }

Прошу вашей помощи, крайний срок - 2 часа, поэтому я надеюсь, что кто-то может помочь мне и направить меня до конца

1 Ответ

0 голосов
/ 07 мая 2020

Просто вызовите свою службу, которая должна в основном вернуть массив байтов, а затем таким образом сохранить его в большом двоичном объекте. При необходимости вы можете изменить тип.

В вашем ts:

this.yourservice.downloadFile().subscribe((resp) => {
        const fileName = resp.headers.get('filename') ? resp.headers.get('filename') : 'file1_' + new Date();
        const data = resp.body;
        this.blob = new Blob([data], {
            type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        });
        var downloadUrl = window.URL.createObjectURL(data);
        var link = document.createElement('a');
        link.href = downloadUrl;
        link.download = fileName + '.xlsx';
        link.click();
    }, error => {
       console.log("Error downloading the file!!!");

    });

код услуги:

 downloadFile() {
    const headers = new HttpHeaders()
      .set('Accept', 'application/xlsx; charset=utf-8');
    const url = `${this.baseUrl}dowmloadxls`;
    const params = new HttpParams()
      .set("userId", userId);
    return this.http.get(url, { params, headers, observe: 'response', responseType: 'blob' });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...