7_文件上传实例
2015-06-23 16:31
701 查看
前言
本文介绍简单的单文件上传,并解决了HttpPostedFileBase为空的问题。系统设计中使用了MVC的Anotation验证。
view界面是采用
Html.BeginForm的形式
介绍步骤详解
View设置@using (Html.BeginForm("Upload","Admin",FormMethod.Post, new { enctype = "multipart/form-data" })) { @Html.AntiForgeryToken() ///标题字段的输入和验证 @Html.LabelFor(model => model.Title) @Html.EditorFor(model => model.Title) @Html.ValidationMessageFor(model => model.Title) ///上传图片字段的验证 @Html.LabelFor(model => model.ImgUrl) @Html.TextBo 4000 xFor(model => model.ImgUrl, new { @type="file"}) @Html.ValidationMessageFor(model => model.ImgUrl) //上传按钮 <input type="submit" value="确认添加" /> }
Controller Action设置
[HttpPost] public ActionResult Upload(Picture pic) { ///【注1】这样写是为了避免HttpPostedFileBase为空的问题 HttpPostedFileBase image = Request.Files["ImgUrl"]; if (image != null && image.ContentLength > 0) { ///【注2】这里的文件路径名一定要合格,符合文件名规范。 ///否则image.SaveAs(filePath);这句代码会报错。 string fileName = DateTime.Now.ToString("yyyyMMddmmssfff") + "-" + Path.GetFileName(image.FileName); string filePath = Path.Combine(Server.MapPath("~/Upload"), fileName); image.SaveAs(filePath); pic.ImgUrl = "~/Upload/" + fileName; ///此处将pic信息保存到数据库 return this.View(); } }
注意点
View界面要设置:
FormMethod.Post, new { enctype = "multipart/form-data" }
不要将
HttpPostedFileBase image以参数的形式传递进来,会造成
image为空,拿不到数据。建议采用
Request.Files的方式获取图片,
HttpPostedFileBase image = Request.Files["ImgUrl"];即ImgUrl为View页面的Name属性值
Chrome界面上传的文件 不带路径名,而IE会带路径名,如果你不采用上述方法获取路径名,而是通过pic.ImgUrl的方式,采用以下代码兼容
private String getImgUrl(String url) { String imgUrl = url; if (url.LastIndexOf("\\") > -1) { imgUrl = url.Substring(url.LastIndexOf("\\") + 1); } return imgUrl; }
文件保存在服务器上的名字要求不同不然不同用户上传的文件会覆盖。造成数据的丢失错乱。 如果保存的文件名格式错误,还会在下面
image.SaveAs(filePath);这里报错,有不少人遇到这个问题。
显示效果(上面没有给出CSS代码)
小结
本文介绍了MVC下文件上传的小Demo,解决了HttpPostedFileBase为空的问题,顺便提了一些其他经常遇到的问题,文件名不重复,浏览器不同,拿到的路径名不同以及 image.SaveAs(filePath)报错问题。相关文章推荐
- 自动共享和上传文件到兼容的托管站点
- 实现FTP整站上传的批处理代码
- 批处理向FTP上传具有指定属性的文件(增量备份)
- 用PHP实现文件上传
- PHP安全上传图片的方法
- php限制上传文件类型并保存上传文件的方法
- C#实现图片上传与浏览切换的方法
- PHP多个文件上传到服务器实例
- js验证上传图片的方法
- HTML5实现微信拍摄上传照片功能
- jquery.blockUI.js上传滚动等待效果实现思路及代码
- Asp.net实现MVC处理文件的上传下载功能实例教程
- asp.net(C#)中上传大文件的几中常见应用方法
- 多文件上传的例子
- ftp自动上传脚本分享
- 用JSP编写文件上传
- android 拍照和上传的实现代码
- android文件上传示例分享(android图片上传)
- 文件上传的实现
- ruby使用restclient上传服务器本地文件示例