![](/img/trans.png)
[英]How to return an Excel file from ASP.NET Core Web API web-app?
[英]Downloading an excel file from ASP.net Core API
所以我們的自定義 API 返回:
var result = File(
new MemoryStream(report, 0, report.Length),
"application/octet-stream",
$"missionreport_{DateTime.Now}.xlsx");
return result;
當瀏覽到正確的 API 調用時,它會立即下載具有相應名稱和樣式的正確 excel 文件。
現在我們想用一個 Angular 前端來做到這一點。 我們創建了以下內容:
rapport.service.ts:
import { Injectable } from '@angular/core';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { tap, catchError, map } from 'rxjs/operators';
@Injectable()
export class RapportService {
private url = "http://localhost:50000/api/report";
constructor(private http: HttpClient){}
getMissionReport() {
return this.http.get(`${this.url}/mission`, {responseType: 'blob'})
.pipe(
tap(data => console.log('Get mission report: ' + data)),
catchError(this.handleError)
)
}
private handleError(err: HttpErrorResponse) {
let errorMessage = '';
if (err.error instanceof ErrorEvent) {
errorMessage = `An error occurred: ${err.error.message}`;
} else {
errorMessage = `Server returned code: ${err.status}, error message is: ${err.message}`;
}
console.error(errorMessage);
return throwError(errorMessage);
}
}
rapport.component.ts:
getMissionRapport() {
this.rapportService.getMissionReport().subscribe(response => {
const blob = new Blob([response], {type: 'application/octet-stream'});
const url = window.URL.createObjectURL(blob);
window.open(url);
})
}
我們將功能鏈接到一個按鈕。 單擊此按鈕時,我們收到一個僅顯示字節值的“文件”。
代碼的問題是{type: 'application/octet-stream'}
。 您正在指定要保存文件的格式的application/octet-stream
。 因此你得到一個流。
您必須指定正確的類型才能將文件下載為 excel、pdf 或任何格式
application/pdf // for pdf
application/vnd.openxmlformats-officedocument.wordprocessingml.document // for Word doc
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet // for excel
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.