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