File Downloads
Use the built-in file download utilities with generated services.
Basic Usage
downloadFileOperator
typescript
import { Component, inject } from '@angular/core';
import { downloadFileOperator } from './client/utils/file-download';
import { ReportsService } from './client/services';
export class ReportsComponent {
private readonly reportsService = inject(ReportsService);
downloadReport(reportId: number) {
this.reportsService.getReportPdf(reportId)
.pipe(
downloadFileOperator('report.pdf')
)
.subscribe();
}
}
Dynamic Filenames
typescript
downloadReport(reportId: number) {
this.reportsService.getReportPdf(reportId)
.pipe(
downloadFileOperator(`report-${reportId}.pdf`)
)
.subscribe();
}
Function-Based Filenames
typescript
downloadReport(reportId: number) {
this.reportsService.getReportPdf(reportId)
.pipe(
downloadFileOperator((blob: Blob) => {
const date = new Date().toISOString().split('T')[0];
return `report-${reportId}-${date}.pdf`;
})
)
.subscribe();
}
Extract Filename from Headers
extractFilenameFromContentDisposition
typescript
import { HttpClient, HttpResponse } from '@angular/common/http';
import { extractFilenameFromContentDisposition, downloadFile } from './client/utils/file-download';
export class FilesService {
private readonly http = inject(HttpClient);
downloadWithHeaders(url: string) {
this.http.get(url, {
responseType: 'blob',
observe: 'response'
}).subscribe((response: HttpResponse<Blob>) => {
const contentDisposition = response.headers.get('Content-Disposition');
const filename = extractFilenameFromContentDisposition(
contentDisposition,
'download.pdf'
);
if (response.body) {
downloadFile(response.body, filename);
}
});
}
}
Direct Download Function
downloadFile
typescript
import { downloadFile } from './client/utils/file-download';
// Direct usage without operator
this.reportsService.getReportPdf(reportId).subscribe(blob => {
downloadFile(blob, 'report.pdf');
});
Response Type Mapping
Configure blob responses in your OpenAPI config:
typescript
// openapi.config.ts
const config: GeneratorConfig = {
options: {
responseTypeMapping: {
'application/pdf': 'blob',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'blob'
}
}
};