临时保存HttpPostedFileBase

时间:2014-04-11 08:07:01

标签: c# asp.net-mvc tempdata

我有一个类型文件的输入,它将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需要暂时保存(以简单的方式)。

0 个答案:

没有答案