从MemoryStream返回时,ASP.net MVC ActionResult会破坏Excel文件的原因是因为默认情况下,ASP.net MVC会将响应的内容类型设置为"text/html",而不是"application/vnd.ms-excel"。这会导致浏览器在接收到响应后将其视为普通的HTML文本而不是Excel文件。
要解决这个问题,可以通过以下步骤来确保Excel文件正确返回:
Response.ContentType
属性来设置内容类型,如下所示:Response.ContentType = "application/vnd.ms-excel";
using OfficeOpenXml;
public ActionResult DownloadExcel()
{
// 创建Excel文件
using (var package = new ExcelPackage())
{
var worksheet = package.Workbook.Worksheets.Add("Sheet1");
worksheet.Cells["A1"].Value = "Hello";
worksheet.Cells["B1"].Value = "World";
// 将Excel文件内容写入到MemoryStream中
var stream = new MemoryStream(package.GetAsByteArray());
// 设置响应的内容类型为Excel文件
Response.ContentType = "application/vnd.ms-excel";
// 返回MemoryStream作为文件下载
return File(stream, "application/vnd.ms-excel", "example.xlsx");
}
}
通过以上步骤,ASP.net MVC将正确地返回Excel文件,而不会破坏文件内容。在这个例子中,我们使用了EPPlus库来生成Excel文件,然后将其写入到MemoryStream中,并将MemoryStream作为文件下载的返回值。
推荐的腾讯云相关产品:腾讯云对象存储(COS),它是一种高可用、高可靠、低成本的云端存储服务,适用于存储和处理各种非结构化数据,包括图片、音视频、文档等。您可以通过以下链接了解更多关于腾讯云对象存储的信息:腾讯云对象存储(COS)。
领取专属 10元无门槛券
手把手带您无忧上云