簡體   English   中英

從 ASP.net Core API 下載 excel 文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM