我想允许我的用户使用不同的上传按钮上传不同的文档。
我的问题:我有什么方法可以获得上传的文件类型吗?
考虑一个场景: 我的用户可以通过点击继续上传按钮&来上传他们的简历。用户可以通过点击上传求职信按钮上传求职信。
我如何知道上传的内容是简历还是求职信。
我进入控制器的所有内容都是HttpPostedFileBase[]
。
[HttpPost]
public ActionResult Create(FormCollection collection, HttpPostedFileBase[] upload)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
我发现与我的问题类似的一个问题是:Get file names from multiple files uploaded。他们遵循的方法是否有效?我的意思是我的页面上会有8-10个上传按钮。在Post方法中有8-10个参数看起来很奇怪。
答案 0 :(得分:1)
基本上,除非您想创建一个包装所有文件的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
命名,然后在帖子中接受这些参数。就个人而言,我认为接受多个参数是处理此类事情的最佳方式 - 但如果您因某些原因不想这样做,这也不是一个糟糕的解决方案。
答案 1 :(得分:0)
您可以使用属性HttpPostedFileBase.ContentType
答案 2 :(得分:0)
您可以将每个文件上传分解为屏幕上的单独form
。然后在控制器上定位单独的操作。真的,有这么多的上传,是不是更好的只是将它们分解成单独的控制器?您可以在每个屏幕上定位多个控制器。