window.URL.createObjectURL [Angular 7 / Typescript] - PullRequest
0 голосов
/ 28 октября 2018

Мне нужно показать / скачать файл .pdf в моем проекте Angular 7, но у меня возникли некоторые проблемы с window.URL.createObjectURL. Вот что я сделал:

this.userService.getFile(report.id).subscribe(
  res => {
    console.log(res)
    const filename = res.headers.get('content-disposition').split(';')[1].split('=')[1].replace(/\"/g, '')
    const blob = new Blob([res.body], { type: res.body.type })
    const url = window.URL.createObjectURL(blob)
    const a: HTMLAnchorElement = document.createElement('a') as HTMLAnchorElement

    a.href = url
    a.download = filename
    window.document.body.appendChild(a)
    a.click()
    window.document.body.removeChild(a)
    URL.revokeObjectURL(url)
  },
  err => {
    console.log(err)
  }

где getFile () - простой http-запрос

getFile(fileId: string): Observable<any> {
   return this.http.get(environment.API_URL + '/file/' + fileId, {observe: 'response', responseType: 'blob'})
}

Моя среда IDE также запускает «элемент Instance недоступен» в окне .URL. createObjectURL ()

Кажется, что файл извлекается с сервера, и с консоли я вижу отладочную информацию «Перейти к blob: //», но приглашение на загрузку не появляется.

Я использовал тот же подход в другом проекте Angular (но версии 6), и он работает хорошо, я не могу понять, почему сейчас больше не работает. Любое предложение?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

У меня была похожая проблема.Оставив window исправил это для меня.Для справки мой полный код:

export class DownloadComponent {
  @Input() content: any;
  @Input() filename = 'download.json';

  download() {
    const json = JSON.stringify(this.content);
    const blob = new Blob([json], {type: 'application/json'});
    const link = document.createElement('a');
    link.href = URL.createObjectURL(blob);
    link.download = this.filename;
    link.click();
  }
}
0 голосов
/ 29 октября 2018

Вот моя рабочая версия.

let link = document.createElement('a');
link.target = '_blank';
link.href = window.URL.createObjectURL(blob);
link.setAttribute("download", fileName);
link.click();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...