MVC 4 Razorfile upload

我是新来的MVC 4,我试图在我的网站上实施file upload控制。 我无法find错误。我在我的文件中得到一个空值。

控制器:

public class UploadController : BaseController { public ActionResult UploadDocument() { return View(); } [HttpPost] public ActionResult Upload(HttpPostedFileBase file) { if (file != null && file.ContentLength > 0) { var fileName = Path.GetFileName(file.FileName); var path = Path.Combine(Server.MapPath("~/Images/"), fileName); file.SaveAs(path); } return RedirectToAction("UploadDocument"); } } 

视图:

 @using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype = "multipart/form-data" })) { <input type="file" name="FileUpload" /> <input type="submit" name="Submit" id="Submit" value="Upload" /> } 

Upload方法的HttpPostedFileBase参数必须与file input名称相同。

所以只要将input改为:

 <input type="file" name="file" /> 

另外,您可以在Request.Filesfind这些文件:

 [HttpPost] public ActionResult Upload() { if (Request.Files.Count > 0) { var file = Request.Files[0]; if (file != null && file.ContentLength > 0) { var fileName = Path.GetFileName(file.FileName); var path = Path.Combine(Server.MapPath("~/Images/"), fileName); file.SaveAs(path); } } return RedirectToAction("UploadDocument"); } 

澄清它。 模型:

 public class ContactUsModel { public string FirstName { get; set; } public string LastName { get; set; } public string Email { get; set; } public string Phone { get; set; } public HttpPostedFileBase attachment { get; set; } 

发布行动

 public virtual ActionResult ContactUs(ContactUsModel Model) { if (Model.attachment.HasFile()) { //save the file //Send it as an attachment Attachment messageAttachment = new Attachment(Model.attachment.InputStream, Model.attachment.FileName); } } 

最后是检查hasFile的扩展方法

 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace AtlanticCMS.Web.Common { public static class ExtensionMethods { public static bool HasFile(this HttpPostedFileBase file) { return file != null && file.ContentLength > 0; } } } 

查看页面

 @using (Html.BeginForm("ActionmethodName", "ControllerName", FormMethod.Post, new { id = "formid" })) { <input type="file" name="file" /> <input type="submit" value="Upload" class="save" id="btnid" /> } 

脚本文件

 $(document).on("click", "#btnid", function (event) { event.preventDefault(); var fileOptions = { success: res, dataType: "json" } $("#formid").ajaxSubmit(fileOptions); }); 

在控制器中

  [HttpPost] public ActionResult UploadFile(HttpPostedFileBase file) { } 

你只需要更改input字段的名称,因为参数和input字段名称中需要使用相同的名称,只需更换此行即可。您的代码工作正常

  <input type="file" name="file" /> 

我认为,更好的方法是在您的控制器或API中使用HttpPostedFileBase 。 在此之后,您可以简单地检测大小,types等

文件属性,你可以在这里find:

MVC3如何检查HttpPostedFileBase是否是一个图像

例如ImageApi:

 [HttpPost] [Route("api/image")] public ActionResult Index(HttpPostedFileBase file) { if (file != null && file.ContentLength > 0) try { string path = Path.Combine(Server.MapPath("~/Images"), Path.GetFileName(file.FileName)); file.SaveAs(path); ViewBag.Message = "Your message for success"; } catch (Exception ex) { ViewBag.Message = "ERROR:" + ex.Message.ToString(); } else { ViewBag.Message = "Please select file"; } return View(); } 

希望它有帮助。