我希望允许我的用户使用不同的上传按钮上传不同的文档。
我的问题是:我有什么办法可以得到上传的文档类型吗?
考虑一个场景:我的用户可以通过点击简历上传按钮上传他们的简历,用户也可以通过点击上传求职信按钮来上传求职信。
我怎么知道上传的内容是简历还是求职信。
我在控制器里得到的只有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个参数看起来很奇怪。
发布于 2015-09-13 21:39:25
基本上,您有三个选项,除非您想要创建一个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,然后在帖子中接受这些参数。就我个人而言,我认为接受多个参数是处理这类事情的最好方法--但是如果您出于某种原因不想这样做,这也不是一个糟糕的解决方案。
发布于 2015-09-13 21:25:04
您可以使用属性HttpPostedFileBase.ContentType知道文件类型。
发布于 2015-09-13 21:33:12
您可以将每个文件上传到屏幕上的一个单独的form中。然后针对控制器上的单独动作。真的,如此之多的上传,难道不是更好地把它们分解成单独的控制器吗?您可以针对每个屏幕的许多控制器。
https://stackoverflow.com/questions/32554263
复制相似问题