簡體   English   中英

為什么數據不從.Net Core 3.1 導出到 Angular 10 中的 csv 文件?

[英]Why data not exporting to csv file in Angular 10 from .Net Core 3.1?

我使用.Net Core 3.1 作為后端,Angular 10 作為前端。 我想在那里導出 csv 文件。 現在文件正在導出,但數據未顯示在 csv 文件中。 它將數據顯示為 [object object]。 我從過去幾個小時開始檢查谷歌並嘗試在我的項目中但失敗了。

My.Net 核心代碼如下:

Controller::

public HttpResponseMessage ExportReport()
{
     byte[] carrierPayoutReport = collectReportData();
     var dataStream = new System.IO.MemoryStream(carrierPayoutReport);
     var result = new HttpResponseMessage(HttpStatusCode.OK);
     result.Content = new StreamContent(dataStream);
     result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
     result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
     {
         FileName = "File.csv"
     };
     return result;
}

CollectReport() 包含如下代碼:

public byte[] CollectReport()
{
     var output = new byte[] { };
     DataTable dtReportData= new DataTable();
     MemoryStream stream = new MemoryStream();
     //Fetch Data From Database start
     //dtReportData= dbset.Tables[0];
     //Fetch Data From Database End
     using (StreamWriter writer = new StreamWriter(stream))
     {
       foreach (DataRow row in dtReportData.Rows)
       {
          writer.WriteLine("Hello")
       }
       writer.Flush();
     }
     stream.Flush();
     output = stream.ToArray();
     return output;
}

Angular 組件包含如下代碼:

this.apiService.exportCSV().subscribe(data => {
var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:attachment/csv,' + encodeURI(resp["content"]);
hiddenElement.target = '_blank';
hiddenElement.download = 'PayoutCarrier.csv';
hiddenElement.click();
})

因此,使用此代碼 csv 文件正在導出,但其中不包含數據。 當我打開 csv 文件時,它顯示的是 [Object Object] 而不是原始數據。 像附圖csv 文件 snep那么如何在 csv 文件上顯示我的數據?

經過建議,我在 C# 中設置了如下代碼:

using (StreamWriter writer = new StreamWriter(stream))
     {
       foreach (DataRow row in dtReportData.Rows)
       {
          writer.WriteLine("Hello")
       }
       writer.Flush();
       stream.Flush();
       stream.Seek(0, SeekOrigin.Begin);
     }
     output = stream.ToArray();
     return output;

有關我從數據庫中獲取的數據的更多詳細信息。

我還檢查了如果我從 byte[] 創建文件並將文件存儲在本地系統中,那么它會正確放置所有數據。 但是當我將它發送到 Angular 端時,只有它沒有正確創建 csv 文件。 如果文件是從.Net Core 創建的,那么它會使用值正確創建,但是當我在 API 響應中將 byte[] 發送到 angular 時,它不會在文件中正確放置值。

當我簽入控制台時,它顯示如下響應:控制台響應

我認為你有 position 和 stream 在開始后再次寫入它。 您可以使用以下代碼來執行此操作:

stream.Seek(0, SeekOrigin.Begin);

這將 go 直線前行

output = stream.ToArray(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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