gpt4 book ai didi

javascript - 下载 c# excel 字节数组并将其转换为 javascript blob

转载 作者:行者123 更新时间:2023-11-28 03:14:21 25 4
gpt4 key购买 nike

我正在使用 POST 方法获取 Excel 文件的字节数组

C# 服务器端实现:

 downloadExcel() {
....
FileResultDto fileResultDto = new FileResultDto
{
Data = ExcelHelper.CreateExcelFile(excelFile) //Data contains the byte array
};

return new JsonHttpResponseMessage(JsonConvert.SerializeObject(fileResultDto));
}

CreateExcelFile():

public byte[] CreateExcelFile(ExcelFile excelFile)
{
try
{
#region Validation

if (excelFile == null)
{
throw new ArgumentNullException(nameof(excelFile));
}

#endregion

byte[] bytes;

using (ExcelPackage excelPackage = new ExcelPackage())
{
for (int i = 1; i <= excelFile.Worksheets.Count; i++)
{
Worksheet worksheet = excelFile.Worksheets[i - 1];

excelPackage.Workbook.Worksheets.Add(worksheet.Name);

ExcelWorksheet currentExcelWorksheet = excelPackage.Workbook.Worksheets[i];

if (excelFile.HasLogoTemplate)
{
byte[] imageBytes = Convert.FromBase64String(LogoBase64);

Image image;
using (MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
{
image = Image.FromStream(ms, true);
}

ExcelPicture picture = currentExcelWorksheet.Drawings.AddPicture("Logo", image);

picture.SetPosition(0, 4, 0, 10);

currentExcelWorksheet.Row(1).Height = 50;
}

SetColumnsWidths(currentExcelWorksheet, worksheet);

WriteHeaderRow(currentExcelWorksheet, worksheet.HeaderRow);

WriteCells(currentExcelWorksheet, worksheet.Cells);
}

#region Set Excel Stream

bytes = excelPackage.GetAsByteArray();

#endregion
}

return bytes;
}
catch (Exception exception)
{
throw new Exception("There was an error on excel export. Exception: ", exception);
}
}

前端实现:

public downloadExcel(): void {

this.myRepository.downloadExcel(this.postData).then(result => {
var byteArray = new Uint8Array(result.data.data);

var a = window.document.createElement('a');
a.href = window.URL.createObjectURL(new Blob([byteArray], { type: "application/octet-stream" }));

a.download = "test.xlsx";

document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}, error => {
console.log(error);
});
}

显然创建的 blob 文件似乎已损坏。有什么建议吗?问题出在哪里?

最佳答案

最终使用“arraybuffer”作为http请求的响应类型解决了问题。

let requestConfiguration: ng.IRequestConfig = {
cache: ...,
data: ...,
headers: ...,
method: ...,
url: ...,
responseType: 'arraybuffer'
};

let promise: ng.IPromise<any> = this.$http(requestConfiguration);

关于javascript - 下载 c# excel 字节数组并将其转换为 javascript blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59770146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com