我正在使用EPPlus在服务器上创建一个excel文件。问题是,我不想将文件保存在客户端硬盘上,当我在服务器上运行应用程序时,我相信这会将文件保存在服务器硬盘上。
是否可以将此文件发送回客户端/浏览器一些方法?
public void CreateAnnuityExcelSheet(List<Calculation> cList, FormCollection form, int DTCyear)
{
List<Calculation> newList = new List<Calculation>();
newList.Add(cList.First()); //Getting the values for the first row
var StartValue = newList[0].StartValue;
var radio = form["advanceOrArrears"];
string fileName = newList[0].CalculationName;
string path = @"C:\ExcelFiles\" + fileName + ".xlsx"; //Path for the file
FileInfo info = new FileInfo(path);
info.Directory.Create(); //If C:\ExcelFiles does not exist, create it
if (!info.Exists)
{
using (ExcelPackage package = new ExcelPackage(info))
{
ExcelWorksheet ws = package.Workbook.Worksheets.Add(fileName);
//Styles for the sheet
package.Save();
}
}
}
答案 0 :(得分:2)
最简单的方法是将字节作为文件发送到浏览器。如果用于创建Excel文件的库允许您保存到流(例如ClosedXML),那么您可以在MVC操作中执行
var stream = new MemoryStream();
workbook.SaveAs(stream);
stream.Position = 0;
return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml", "file.xlsx");
如果您无法将其保存到内存流,则将其保存到服务器的光盘,然后您只需将文件路径和内容类型传递给return File()
。
答案 1 :(得分:0)
我使用了httphandler将字节文件对象发送到浏览器。
此链接应该有帮助,Generating a file, then launching a secure download
答案 2 :(得分:0)
然后将文件保存在服务器上,然后将其传输给控制器中的用户:
return new FilePathResult(myFilePath,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")