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[]
の配列に変換するにはどうすればよいですか?
前もって感謝します。
ドキュメントのように、「Blobからコンテンツを読み取る唯一の方法は、FileReaderを使用することです。」 https://developer.mozilla.org/en-US/docs/Web/API/Blob 。
編集:blobの一部が必要な場合は、スライスを実行して新しいBlobを返し、ファイルリーダーを使用できます。
私は実際にこれを試したことはありませんが、デフォルトではエラーが「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);
});
}