我正在为一家地产代理商创建一个网络应用程序,并在其中一个用于上传属性的表单上,我需要将多个图像或文件(如pdf格式的平面图)上传到文件夹并将其路径存储在数据库中(SQL SERVER) 。
我尝试使用在线资源的一些帮助,但我无法自行解决这个问题。
这是我浏览文件的部分内容。
<div class="file_inputs">
<input type="file" id="dev_brochure" name="dev_brochure" class="form-control adminarea_files">
<input type="file" id="devListingImg1" name="devListingImg1" class="form-control adminarea_files">
<input type="file" id="devListingImg2" name="devListingImg2" class="form-control adminarea_files">
<input type="file" id="devListingImg3" name="devListingImg3" class="form-control adminarea_files">
</div>
这是我的处理文件上传的控制器
[HttpPost]
public ActionResult InsertDevelopment(development dev, IEnumerable <HttpPostedFileBase> files)
{
try
{
var supportedFileTypes = new [] {"jpg", "jpeg", "png", "gif", "pdf"};
foreach(var file in files)
{
if(file.ContentLength > 0)
{
var fileExt = Path.GetExtension(file.FileName).Substring(1);
if(!supportedFileTypes.Contains(fileExt))
{
TempData["Msg"] = "You have tried to upload a file type that is not allowed";
return RedirectToAction("Create");
}
}
}
var devBrochure = Path.GetFileName(Request.Files["dev_brochure"].FileName);
var devListingPhoto1_LinkName = Path.GetFileName(Request.Files["devListingImg1"].FileName);
var devListingPhoto2_LinkName = Path.GetFileName(Request.Files["devListingImg2"].FileName);
var devListingPhoto3_LinkName = Path.GetFileName(Request.Files["devListingImg3"].FileName);
return View("Create");
}
catch(Exception e)
{
TempData["Msg"] = "Development upload failed :" + e.Message;
return View("Create");
}
}
我的主要问题是控制器操作IEnumerable <HttpPostedFileBase> files
参数中未收到视图中的文件。
我会很感激任何形式的指南来解决这个问题。 感谢
答案 0 :(得分:2)
如果您只是发布表单,请确保表单的内容类型设置为multipart / form-data。
<form action="yourAction" enctype="multipart/form-data" method="post">
如果您尝试使用jquery / ajax发帖,请查看有关该主题的this excellent post。您基本上需要使用jquery来模仿具有该内容类型的表单帖子。
使用HttpFileCollectionValueProvider
如果(根据您的评论/澄清),这不是您的问题,那么可能就是您尝试在控制器级别上传这些文件的方式。
上传多个文件时,我始终关注this advice。简而言之,尝试放弃HttpPostedFileBase参数或尝试将文件对象名称与参数名称匹配
如果你想坚持&#34;文件&#34;作为参数名称:
<input type="file" name="files[0]" id="files_0" class="form-control adminarea_files">
<input type="file" name="files[1]" id="files_1" class="form-control adminarea_files">
<input type="file" name="files[2]" id="files_2" class="form-control adminarea_files">
<input type="file" name="files[3]" id="files_3" class="form-control adminarea_files">
答案 1 :(得分:1)
确保您的表单标记指定了属性
enctype="multipart/form-data" method="post"
还要确保input-Elements的名称属性设置为
name="files[0]"
name="files[1]"
等等