简单文件上传返回 NULL

本文关键字:返回 NULL 文件 简单 | 更新日期: 2023-09-27 18:31:57

>我正在尝试在MVC 5中进行我的第一个简单文件上传。我正在遵循我找到的一堆示例,但由于某种原因,在我的"创建"操作结果中,上传文件始终以 NULL 形式出现,因此上传代码永远不会运行。有人看到我可能做错了什么吗?

@{
    ViewBag.Title = "Create";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Documents.</h2>
<h4>Upload a new document.</h4>
<div class="well">
@using (Html.BeginForm("Create", "Documents", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <h3>Select a file to upload. </h3>
    <input type="file" name="files" value="" multiple="multiple" />
    <input type="submit" value="Upload your file" title="Upload" />
    <div style="color:Red;font-size:14px">@ViewBag.Message</div>
}
</div>

这是我的控制器:

// POST: Documents/Create
        [HttpPost]
        public ActionResult Create(HttpPostedFileBase uploadFile)
        {
            try
            {
                if(uploadFile != null && uploadFile.ContentLength > 0)
                {
                    string filePath = Server.MapPath("../SiteDocuments" + uploadFile.FileName);
                    uploadFile.SaveAs(filePath);
                }
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                return View();
            }
        }

简单文件上传返回 NULL

文件输入元素的名称应与操作方法参数名称匹配。

因此,请更新 HTML 标记以具有相同的 name 属性值。

<input type="file" name="uploadFile" value="" multiple="multiple" />

您的操作方法将是

[HttpPost]
public ActionResult Create(HttpPostedFileBase uploadFile)
{
  // do something
}

或者更改操作方法参数名称以与文件输入元素名称匹配。

<input type="file" name="files" value="" multiple="multiple" />

您的操作方法将是

[HttpPost]
public ActionResult Create(HttpPostedFileBase files)
{
    if(files!= null && files.ContentLength > 0)
    {
       // do something
    }
}

当您multiple="multiple"属性添加到输入元素时,浏览器将允许最终用户一次选择多个文件。在这种情况下,如果您的操作方法参数是HttpPostedFileBase对象的单个实例,它将从选定的n文件中接收第一个文件。如果你想要所有的文件,你可以将你的参数更改为一个集合,例如

[HttpPost]
public ActionResult Create(IEnumerable<HttpPostedFileBase> files)
{
    if (files != null && files.Any())
    {
        foreach (var file in files)
        {
            if (file.ContentLength > 0)
            {
                //do something
            }
        }
    }
}