在MVC5的一个页面上上传多个文件

本文关键字:文件 MVC5 一个 | 更新日期: 2023-09-27 18:12:30

我想让我的用户使用不同的上传按钮上传不同的文档。

我的问题是:有什么方法可以让我得到正在上传的文档的类型吗?

考虑这样一个场景:我的用户可以上传他们的简历通过点击简历上传按钮&用户可通过点击上传求职信按钮上传求职信。

我怎么知道上传的内容是简历还是求职信呢?

控制器里只有HttpPostedFileBase[]

[HttpPost]
public ActionResult Create(FormCollection collection, HttpPostedFileBase[] upload)
{
    try
    {
        // TODO: Add insert logic here
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}
我发现一个问题类似于我的问题是:从多个上传的文件中获取文件名。他们采用的方法是否有效?我的意思是我会有8-10上传按钮在我的页面。Post方法中有8-10个参数看起来很奇怪

在MVC5的一个页面上上传多个文件

基本上,你有三个选择,除非你想创建一个viewmodel类型的类来包装你所有的文件。

  1. 您可以只使用一个文件上传按钮,multiple="multiple",并接受HttpPostedFileBase[]在您的操作(这可以防止您区分文件彼此)。

  2. 你可以使用不同名称的多个文件上传按钮,并在你的控制器中接受多个参数(你说过你不想这样做)

  3. 您可以使用多个文件上传按钮,适当索引名称,并添加注释,以便您知道哪个文件是哪个。

例子:

HTML:

<input type="file" name="files[0]" /> <!-- resume -->
<input type="file" name="files[1]" /> <!-- cover letter -->
<input type="file" name="files[2]" /> <!-- whatever else -->

在你的HttpPost:

[HttpPost]
public ActionResult Create(HttpPostedFileBase[] files)
{
    // files[0] == resume
    // files[1] == cover letter
    // files[2] == whatever
}

我不知道你为什么不把上传的文件命名为resumecoverLetter,然后在你的帖子中接受这些参数。就我个人而言,我认为接受多个参数是处理这类事情的最佳方式——但如果您出于某种原因不想这样做,这也是一个不错的解决方案。

您可以使用属性HttpPostedFileBase.ContentType

了解文件类型

您可以将每个文件上载到屏幕上的单独form中。然后针对控制器上的单独动作。真的,有这么多的上传,把它们分散到单独的控制器中不是更好吗?