Отправил файл из бэкэнда во внешний интерфейс.Не могу восстановить свою старую форму - PullRequest
0 голосов
/ 21 февраля 2019

здесь у меня есть функция, которая реагирует на нажатие кнопки и получает файл из моего бэкэнда.

onDownload() {

this.http.get('http://localhost:8080/backend/invoice/1/download',
  {responseType: 'blob'})
  .subscribe(res =>
  console.log(res))



}

Пока что я счастлив, потому что внутри консоли Chrome я не получаю никаких ошибок.Ответ в консоли выглядит следующим образом: enter image description here

Тип возврата бэкэнда Java был InputStream (аннотация метода @Produces (MediaType.MULTIPART_FORM_DATA))

Затем я нашел https://stackblitz.com/edit/angular-blob-file-download?file=app%2Fapp.component.ts

и посмотрел на ngOnInit () в app.component.ts

ngOnInit() {
const data = 'some text';
const blob = new Blob([data], { type: 'application/octet-stream' });

this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(window.URL.createObjectURL(blob));


}

В настоящее время я думаю, что мой интерфейс получает BLOB-объект.Итак, я могу начать со строки, начинающейся с «this.fileUrl =», и ввести свой блоб.

Внутри .html у меня есть кнопка для запуска функции onDownload () и другой тег для сохранения файла.на моем локальном жестком диске.

<div>


<button (click)="onDownload()">Herunterladen</button>
</div>

<a [href]="safeResourceUrl" download="file.txt">DownloadFile</a>

Тем временем я изменяю метод onDownload () на

onDownload() {

    this.http.get('http://localhost:8080/backend/invoice/1/download',
      {responseType: 'blob'})
      .subscribe(res => this.safeResourceUrl=this.sanitizer.bypassSecurityTrustResourceUrl(window.URL.createObjectURL(res)))

  }

После того, как я нажму "Herunterladen" и затем ссылку DownloadFile, я получу либо a.TXT-файл, который я не могу прочитать enter image description here

или, если я изменяю имя файла на .pdf в теге внутри .html, я получаю сообщение «не удалось загрузить документ PDF»"

Все, что я хочу, - это получить мой оригинальный pdf, который я сохранил в своей базе данных и который был отправлен из бэкэнда.

У кого-нибудь раньше была такая же проблема?Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 25 февраля 2019

Я изменил свою функцию на

onDownload() {
    window.open(`http://localhost:8080/backend/invoice/${this.invoice.invoiceNr}/download`, 'blank');
  }

Теперь это работает:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...