.NET MVC 上传附件 原理和以前原来一样,只不过实现方式略有不同,具体解决方案如下:
首先我们要进入upload.cshtml页面中选择附件, 按照mvc的流程,先要根据controller跳转,所以创建AttachmentController控制器后,定义好Index的action动作,然后定义upload.cshtml,代码如下:
@{ ViewBag.Title = "Upload"; } <h2>Upload File</h2> @using (Html.BeginForm("Upload", "Attachment", FormMethod.Post, new { enctype = "multipart/form-data" })) { <div> 附件名称:<input name="uploadName" /> </div> <div> 选择附件:<input name="uploadfile" type="file" /> </div> <div> <input type="submit" value="上传" /> </div> }和以前的表单一样,表单使用Html.beginForm,然后 需要加上enctype = "multipart/form-data",效果如下图:
View层创建好之后,然后在AttachmentController 中添加 Upload()方法,代码如下:
/// <summary> /// 上传操作 /// </summary> /// <returns></returns> public ActionResult Upload() { string showFileName = Request["UploadName"]; System.Web.HttpPostedFileBase file = Request.Files["UploadFile"]; //存入文件 if (file.ContentLength > 0) { //先查看附件目录是否存在,不存在就创建,否则会报错 未找到路径。 if(!System.IO.File.Exists(attachFile)){ //这个是根据路径新建一个目录 System.IO.Directory.CreateDirectory(attachFile); //这个是根据路径新建一个文件,如果没有就会创建文件, 否则就会报错:对路径“...”的访问被拒绝。 //System.IO.File.Create(attachFile); } //这个是上传到当前项目的目录下,和Views文件夹同级 file.SaveAs(Server.MapPath("~/") + System.IO.Path.GetFileName(file.FileName)); //这个是上传到指定的目录下,必须指定具体的文件,不然会报错:对路径“...”的访问被拒绝。 file.SaveAs(attachFile + "\\" + System.IO.Path.GetFileName(showFileName)); } ViewBag.Result = System.IO.Path.GetFileName(file.FileName) + " 上传成功!"; return View("Result"); }
<appSettings> <add key="attachFile" value="D:\attachment"/> </appSettings>
string attachFile = ConfigurationSettings.AppSettings["attachFile"].Trim();
需要注意的是,.net的创建文件的方式和java不一样,直接new java.io.File(filePath) 就好了,.net把 创建文件和文件夹分开了,创建目录要用 System.IO.Directory.CreateDirectory(attachFile);
而创建文件要用 System.IO.File.Create(attachFile);
如果明明创建目录,但是用了System.IO.File.Create(attachFile); 就会报如下错误:
业务逻辑写好之后,再定义一个Result.cshtml页面获取上传的信息即可,效果图如下:
好了 ,基本上在MVC上做的上传就基本完成了,还是蛮简单的。