import { Component } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { saveAs } from 'file-saver';
@Component({ selector: 'app-file-download', templateUrl: './file-download.component.html', styleUrls: ['./file-download.component.css'] }) export class FileDownloadComponent {
constructor(private http: HttpClient) { }
downloadExcelFile() { const headers = new HttpHeaders({ 'Content-Type': 'application/vnd.ms-excel' }); this.http.get('api/download', { headers, responseType: 'blob' }) .subscribe(data => this.saveToFileSystem(data), error => console.error(error)); }
saveToFileSystem(response) { const contentDisposition = response.headers.get('Content-Disposition'); const filenameRegex = /filename[^=\n]*=(['"]?)([^'"\n]+)\1/; const matches = filenameRegex.exec(contentDisposition); const filename = (matches != null && matches[2] ? matches[2] : 'untitled.xlsx'); saveAs(response.body, filename); }
}
以上代码使用HttpClient发送GET请求来下载Excel文件,将响应的数据类型设置为Blob类型,然后使用file-saver库将Blob数据保存到本地文件系统中。在请求头中设置Content-Type为application/vnd.ms-excel来确保正确的响应类型。注意,在服务器端必须返回正确的Content-Disposition头来指定文件名。