我有一个类型文件的输入,它将HttpPostedFileBase(Excel.xlxs)发送到我的控制器。这个文件我需要保存临时用于其他操作。这个HttpPostedFileBase我使用Excel Data Reader转换为DataSet。当我直接使用该文件时,这可以正常工作,但是当我将它存储在TempData中时则不行。
第一步:
[HttpPost]
public ActionResult CompareExcel(ExcelModel model, string submitValue, string compareOption)
{
TempData["firstFile"] = model.Files[0];
TempData["secondFile"] = model.Files[1];
if (submitValue == "Compare calculations")
{
var firstFile = TempData["firstFile"];
var secondFile = TempData["secondFile"];
if (firstFile == null || secondFile == null)
return View("CompareExcel");
else
return CompareColumn(compareOption);
}
//Assume submitValue is "Compare calculations"
}
第二个动作:
[HttpPost]
public ActionResult CompareColumn(string compareOption)
{
List<Calculation> cList = new List<Calculation>();
Calculation calc = new Calculation();
BigModel m = new BigModel();
HttpPostedFileBase firstFile = (HttpPostedFileBase)TempData["firstFile"];
HttpPostedFileBase secondFile = (HttpPostedFileBase)TempData["secondFile"];
DataSet firstSet = ExcelToDataSet.ConvertToDataSet(firstFile);
DataSet secondSet = ExcelToDataSet.ConvertToDataSet(secondFile);
for (var i = 0; i < firstSet.Tables[0].Rows.Count; i++) //Get Object reference not set to an instance of an object
{
DataRow data = firstSet.Tables[0].Rows[i];
calc.PresentValue = Convert.ToDecimal(data.Table.Rows[i]["Capital balance"]);
}
return View();
}
我的模特:
public partial class GetExcel
{
public List<HttpPostedFileBase> Files { get; set; }
public GetExcel()
{
Files = new List<HttpPostedFileBase>();
}
}
将HttpPostedFileBase(Excel.xlxs)转换为DataSet的方法。该方法在直接发送文件时有效,但在使用TempData时不起作用:
public static DataSet ConvertToDataSet(HttpPostedFileBase excelFile)
{
DataSet result = null;
if (excelFile != null && excelFile.ContentLength > 0)
{
// .xlsx
IExcelDataReader reader = ExcelReaderFactory.CreateOpenXmlReader(excelFile.InputStream);
// .xls
//IExcelDataReader reader = ExcelReaderFactory.CreateBinaryReader(file.InputStream);
reader.IsFirstRowAsColumnNames = true; // if your first row contains column names
result = reader.AsDataSet();
reader.Close();
}
return result;
}
当我调试并查看firstFile和secondFile时,我可以看到那里有东西。我可以看到HttpPostedFileBase的文件名,但是当我使用ConvertToDataSet时,它在第一个if中失败。显然,TempData中保存的文件有问题。是否有可能使这个工作与TempData或有人可以建议一些简单的方法来解决这个问题?它应该工作,我做错了什么?整个问题是HttpPostedFileBase需要暂时保存(以简单的方式)。