在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个参数看起来很奇怪
基本上,你有三个选择,除非你想创建一个viewmodel类型的类来包装你所有的文件。
-
您可以只使用一个文件上传按钮,
multiple="multiple"
,并接受HttpPostedFileBase[]
在您的操作(这可以防止您区分文件彼此)。 -
你可以使用不同名称的多个文件上传按钮,并在你的控制器中接受多个参数(你说过你不想这样做)
-
您可以使用多个文件上传按钮,适当索引名称,并添加注释,以便您知道哪个文件是哪个。
例子:
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
}
我不知道你为什么不把上传的文件命名为resume
和coverLetter
,然后在你的帖子中接受这些参数。就我个人而言,我认为接受多个参数是处理这类事情的最佳方式——但如果您出于某种原因不想这样做,这也是一个不错的解决方案。
您可以使用属性HttpPostedFileBase.ContentType
您可以将每个文件上载到屏幕上的单独form
中。然后针对控制器上的单独动作。真的,有这么多的上传,把它们分散到单独的控制器中不是更好吗?