ASP.NET MVC - 从 MemoryStream 下载 Excel 文件(损坏的文件)

excel

1个回答

写回答

gehailian1983

2025-06-15 07:20

+ 关注

excel
excel

使用ASP.NET MVC实现从MemoryStream下载excel文件(损坏的文件)

在ASP.NET MVC中,我们经常需要实现从服务器下载文件的功能。本文将介绍如何使用MemoryStream来下载excel文件,并解决可能出现的文件损坏问题。

准备工作

在开始之前,我们需要准备一些基本的环境和工具。首先,确保你已经安装了Visual Studio和ASP.NET MVC框架。接下来,我们需要安装NPOI库,这是一个用于处理excel文件的开源库。你可以通过NuGet包管理器来安装NPOI库。

创建控制器和视图

首先,我们需要创建一个控制器来处理文件下载的请求。在控制器中,我们将创建一个MemoryStream对象,并将其填充为excel文件的内容。然后,我们将该MemoryStream对象转换为字节数组,并将其作为文件下载的结果返回给客户端。

下面是一个示例控制器的代码:

csharp

public class DownloadController : Controller

{

public ActionResult Downloadexcel()

{

// 创建一个excel文件

var workbook = new HSSFWorkbook();

var sheet = workbook.CreateSheet("Sheet1");

var row = sheet.CreateRow(0);

var cell = row.CreateCell(0);

cell.SetcellValue("Hello World!");

// 将excel文件保存到MemoryStream中

var stream = new MemoryStream();

workbook.Write(stream);

stream.Position = 0;

// 将MemoryStream转换为字节数组,并返回文件下载结果

return File(stream.ToArray(), "application/vnd.ms-excel", "example.xls");

}

}

接下来,我们需要在视图中创建一个按钮,以便用户点击时触发文件下载的请求。在视图中添加以下代码:

html

@Html.ActionLink("下载excel文件", "Downloadexcel", "Download")

处理文件损坏问题

在某些情况下,如果我们直接从MemoryStream中下载excel文件,可能会遇到文件损坏的问题。这是因为MemoryStream的默认编码是UTF-8,而excel文件的编码是Unicode。

为了解决这个问题,我们可以使用BinaryWriter来将MemoryStream中的内容写入到一个临时文件中,然后再将临时文件作为下载的结果返回给客户端。

下面是修改后的控制器代码:

csharp

public class DownloadController : Controller

{

public ActionResult Downloadexcel()

{

// 创建一个excel文件

var workbook = new HSSFWorkbook();

var sheet = workbook.CreateSheet("Sheet1");

var row = sheet.CreateRow(0);

var cell = row.CreateCell(0);

cell.SetcellValue("Hello World!");

// 将excel文件保存到MemoryStream中

var stream = new MemoryStream();

workbook.Write(stream);

stream.Position = 0;

// 将MemoryStream中的内容写入到临时文件中

var tempFilePath = Path.GetTempFileName();

using (var fileStream = new FileStream(tempFilePath, FileMode.Create))

{

stream.CopyTo(fileStream);

}

// 将临时文件作为下载结果返回给客户端

return File(tempFilePath, "application/vnd.ms-excel", "example.xls");

}

}

这样,我们就解决了从MemoryStream下载excel文件时可能出现的文件损坏问题。

在本文中,我们学习了如何使用ASP.NET MVC从MemoryStream下载excel文件,并解决了可能出现的文件损坏问题。通过将MemoryStream中的内容写入到临时文件中,我们可以确保下载的excel文件是完整的。

希望本文对你有所帮助!如果你有任何问题或疑问,请随时留言。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号