我在Controller中有以下操作
public ActionResult DownloadExcel()
{
//create and populate Excel file here
C1XLBook testBook = new C1XLBook();
//populate it here
MemoryStream ms = new MemoryStream();
testBook.Save(ms, FileFormat.Biff8);
return File(ms, "application/ms-excel", "test-file.xls");
}
打开文件时,我收到Excel消息,指出该文件与扩展名不匹配,文件打开已损坏。
如果我将文件保存在硬盘驱动器上并从那里返回,一切都很好:
return base.File(@"C:\LOGS\test-file.xls", "application/ms-excel", "test-excel.xls");
我最初认为Save函数在将其保存到MemoryStream时会破坏它,所以我保存并重新加载它并且很好地传回给用户 - 当保存在硬盘驱动器上并从那里返回时,而不是来自MemoryStream
有什么想法吗?我不太喜欢将文件保存在硬盘上....此外我应该能够将它保存到MemoryStream并从那里返回它?
我有一个预感,也许MemoryStream不应该用于返回MVC中的文件,因为每个请求都是隔离的?
答案 0 :(得分:5)
在将结果传递给结果之前,您可能需要回滚内存流(设置ms.Position = 0;
)吗?在致电Save
之后,其位置将在结束时,而不是开头。