原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本人声明。否则将追究法律责任。
作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui0317/article/details/9501639
作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui0317/article/details/9501639
.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");
}
上面的attachFile 是在项目根目录的web.config 中的<appSetting> 添加一个键值对保存附件上传的路径,比如:
<appSettings>
<add key="attachFile" value="D:\attachment"/>
</appSettings>
然后在AttachmentController 中添加常量获取配置信息,如下:
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上做的上传就基本完成了,还是蛮简单的。