从MVC中的HttpPostedFileBase获取值

时间:2014-03-28 12:27:42

标签: c# asp.net asp.net-mvc html5 razor

我的控制器:

    [HttpPost]
    public ActionResult ShowExcelFile(HttpPostedFileBase getFile)
    {
        //Make something with values of getFile
        return PartialView("ShowExcelFile");
    }

在我看来:

@using (Html.BeginForm("ShowExcelFile", "ShowExcel", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
     <input type="file" id="getFile" name="getFile" /><br />
     <input type="submit" value="Upload file" />
}

如何从getFile中读取值?

3 个答案:

答案 0 :(得分:3)

解析Excel文件的一种简单方法是使用诸如Excel Data Reader之类的库(也可用作Nuget package)。安装后,阅读Excel文件非常简单。

using Excel;

[HttpPost]
public ActionResult ShowExcelFile(HttpPostedFileBase getFile)
{
    if (getFile != null && getFile.ContentLength > 0)
    {
        // .xlsx
        IExcelDataReader reader = ExcelReaderFactory.CreateOpenXmlReader(getFile.InputStream);

        // .xls
        IExcelDataReader reader = ExcelReaderFactory.CreateBinaryReader(getFile.InputStream);

        reader.IsFirstRowAsColumnNames = true; // if your first row contains column names
    }

    return PartialView("ShowExcelFile");
}

从那时起,如果不知道Excel文件的内容,很难告诉您确切的需求。您可以将文件转换为System.Data.DataSet,其中包含Excel文件的每个工作表和数据。

DataSet dataSet = reader.AsDataSet();

答案 1 :(得分:1)

您可以使用ViewModel通过将其添加为属性来执行此操作:

查看

@using (Html.BeginForm("ShowExcelFile", "ShowExcel", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
     @Html.TextBoxFor(m => m.Files, new { type = "file", name = "Files" })<br />
     <input type="submit" value="Upload file" />
}

<强>模型

public class AModel 
{
    public AModel()
    {
        Files = new List<HttpPostedFileBase>();
    }

    public List<HttpPostedFileBase> Files { get; set; }
    // Rest of model details
}

您可以通过删除不需要的参数来检索文件,例如

<强>控制器

[HttpPost]
public ActionResult ShowExcelFile(AModel model) 
 {
    var file = model.Files[0];
    ...
 }

答案 2 :(得分:0)

不知道你是什么意思

  

使用getFile值

创建一些东西

获取文件使用的扩展

string fileExtension = Path.GetExtension(getFile.FileName);

//save this file using



string path = Path.Combine(Server.MapPath(Url.Content("~/Content")), "Name"+fileExtension);
file.SaveAs(path);