【问题标题】:Multiple file upload using Request.Files["files"] MVC使用 Request.Files["files"] MVC 上传多个文件
【发布时间】:2010-11-20 10:52:30
【问题描述】:

这是我的代码。我想将 3 个文件上传到我的数据库中

首先在视图中我写了这个: ..... ....

这是3个文件上传:

<input type="file" name="files" id="FileUpload1" />
<input type="file" name="files" id="FileUpload2" />
<input type="file" name="files" id="FileUpload3" />

在控制器中我使用以下代码:

IEnumerable<HttpPostedFileBase> files = Request.Files["files"] as IEnumerable<HttpPostedFileBase>;
foreach (var file in files)
{
byte[] binaryData = null;
HttpPostedFileBase uploadedFile = file;
if (uploadedFile != null && uploadedFile.ContentLength > 0){
 binaryData = new byte[uploadedFile.ContentLength];
 uploadedFile.InputStream.Read(binaryData, 0,uploadedFile.ContentLength);
}
}

但文件总是返回 NULL :(

请帮帮我,谢谢。

【问题讨论】:

    标签: asp.net-mvc-2


    【解决方案1】:

    试试这个:

    <% using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) {%>
        <input type="file" name="files" id="FileUpload1" />
        <input type="file" name="files" id="FileUpload2" />
        <input type="file" name="files" id="FileUpload3" />
        <input type="submit" value="Upload" />
    <% } %>
    

    以及对应的控制器:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    
        [HttpPost]
        public ActionResult Index(IEnumerable<HttpPostedFileBase> files)
        {
            foreach (var file in files)
            {
                if (file.ContentLength > 0)
                {
                    // TODO: do something with the uploaded file here
                }
            }
            return RedirectToAction("Index");
        }
    }
    

    干净一点。

    【讨论】:

    • 是否需要在actionResult中添加“IEnumerable files”作为参数?我这样做了,但仍然是 NULL
    • 是的,这样您就不再需要在操作中使用Request.Files。默认模型绑定器将完成这项工作。我不知道你为什么会得到 NULL。这些输入是否在表单内?当我测试我的代码时,我能够获取上传的文件。
    • 如果我已经为页面上的其余内容获取了一个模型作为我的控制器方法的参数,那我该如何进行呢?
    • @JamesBender,您只需定义一个视图模型并让您的控制器操作将此视图模型作为参数。
    【解决方案2】:

    你应该使用:

    IList<HttpPostedFileBase> files = Request.Files.GetMultiple("files")
    

    改为。

    【讨论】:

      猜你喜欢
      • 2013-02-09
      • 1970-01-01
      • 2014-07-14
      • 1970-01-01
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 2019-01-26
      • 2018-12-30
      相关资源
      最近更新 更多