web-dev-qa-db-ja.com

Angular 5 blob応答とjsonエラーでhttp getを管理します

Angular 5アプリケーションです。バックエンドアプリケーションからファイルをダウンロードする必要があります。これを行うには、次のような関数を呼び出すだけです。

public executeDownload(id: string): Observable<Blob> {
  return this.http.get(this.replaceUrl('app/download', denunciaId), {responseType: 'blob'}).map(result => {
    return result;
  });
}

ダウンロードサービスを呼び出すには、次のようにします。

public onDownload() {
  this.downloadService.executeDownload(this.id).subscribe(res => {
    saveAs(res, 'file.pdf');
  }, (error) => {
    console.log('TODO', error);
    // error.error is a Blob but i need to manage it as RemoteError[]
  });
}

バックエンドアプリケーションが特定の状態にある場合、Blobを返す代わりに、HttpErrorResponseフィールドにRemoteErrorの配列を含むerrorを返します。 RemoteErrorは、リモートエラーを管理するために作成したインターフェイスです。

Catch関数では、error.errorはBlobです。 Blob属性をRemoteError[]の配列に変換するにはどうすればよいですか?

前もって感謝します。

5
xcesco

ドキュメントのように、「Blobからコンテンツを読み取る唯一の方法は、FileReaderを使用することです。」 https://developer.mozilla.org/en-US/docs/Web/API/Blob

編集:blobの一部が必要な場合は、スライスを実行して新しいBlobを返し、ファイルリーダーを使用できます。

1
Vayrex

私は実際にこれを試したことはありませんが、デフォルトではエラーが「any」であるため、以下が機能するはずです。

public executeDownload(id: string): Observable<Blob> {
  return this.http.get<Blob>(this.replaceUrl('app/download', denunciaId), {responseType: 'blob'});
}

public onDownload() {
  this.downloadService.executeDownload(this.id).subscribe(
   res: Blob  => {
     saveAs(res, 'file.pdf');
   }, 
   error: RemoteError[] => {
     console.log('TODO', error);
   });

}

0
GreyBeardedGeek