本文导读:在MVC中实现文件上传与传统的WebForm上传文件方法都差不多,在cshtml视图页面放一个file标签,然后在actionname方法中处理用户上传的文件。下面简单介绍MVC中上传文件的方法。

一、MVC中如何上传文件

1、在Web Forms中,当你把一个FileUpload控件拖到设计器中,你或许没有注意到在生成的HTML中会在form标签中加入一条额外属性enctype="multipart/form-data". 而FileUpload控件本身会生成为<input type=”file” />,在MVC的view里,下列HTML可以做到同样效果

HTML 代码 复制

<formaction="/"method="post"enctype="multipart/form-data"><inputtype="file"name="FileUpload1"/><br/><inputtype="submit"name="Submit"id="Submit"value="Upload"/></form>

注意form标签已经包括了enctype标签,而method属性则设为”post”,这样设置并不多于因为默认的提交时通过HTTP get方式进行

2、在Asp.net MVC中Controller类中,Request对象作为HttpRequestBase类型的一个属性存在。HttpReuqestBase其实是HTTP请求的一个封装,暴漏了很多属性,包括Files collection(其实是HttpFileCollectionBase的集合),在集合中的每一个元素都是HttpPostedFileBase的集合,扩展方法是用于确保上传的文件是否存在。实际上,这和FileUpload.HasFile()方法的工作原理一致。

二、MVC上传文件的实例:

1、视图文件

前台引擎采用Razor

上传页View:

C# 代码 复制

@modelSystem.Web.HttpContextBase@{ViewBag.Title="上传文件";}<h3>上传文件</h3><br/><br/>@*new{enctype="multipart/form-data"}比不可少,否则上传文件不会成功*@@using(Html.BeginForm("Upload","UploadFile",FormMethod.Post,new{enctype="multipart/form-data"})){<text>选择上传文件:</text><inputname="file"type="file"id="file"/><br/><br/><inputtype="submit"name="Upload"value="Upload"/>}

2、后台UploadFileController

C# 代码 复制

[HttpPost]publicActionResultUpload(FormCollectionform){if(Request.Files.Count==0){      //Request.Files.Count文件数为0上传不成功      ReturnView();      }varfile=Request.Files[0];if(file.ContentLength==0){//文件大小大(以字节为单位)为0时,做一些操作      ReturnView();    }    else    {      //文件大小不为0      HttpPostedFileBasefile=Request.Files[0];      //保存成自己的文件全路径,newfile就是你上传后保存的文件,      //服务器上的UpLoadFile文件夹必须有读写权限            file.SaveAs(Server.MapPath(@"UploadFile\\newfile"));    }    newFile=DateTime.Now.ToString("yyyyMMddHHmmss")+".sl";returnView();}