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.Files
find这些文件:
[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(); }
希望它有帮助。