开发工具与关键技术:MVC、C#、jQuery
作者:张俊辉
撰写时间:2019年05月17日
核心思路:在页面实现文件上传,然后在后台判断上传的文件是否为空,判断是否为视频类型,判断储存路径是否存在,若不存在则新增储存路径,最后保存文件到储存路径并返回文件的相对路径。
-
在页面实现文件上传时需要申明FormData对象,用以将数据编译成键值对并存放文件;代码如下:
//获取文件 var files = $("#form input").prop("files")[0]; //声明FormData对象 var formData = new FormData(); //向FormData对象添加文件 formData.append("file", files);
-
在通过
$.ajax
提交时需要设置的两个参数contentType
与processData
为false
;
contentType
默认值为"application/x-www-form-urlencoded"
代表的是提交数据的编码类型,设置为false
时代表自动检测;
processData
默认值为true
,为搭配contentType
默认的编码类型,processData
都会将data提交的参数转换为一个查询字符串,设置为false
时则不转换为查询字符串,即可以传递DOM 树信息或其它不希望转换的信息;
代码如下:$.ajax({ type: "POST", url: "UploadingVideo", contentType: false, processData: false, data: formData, success: function (data) { if (data == "上传失败!") {alert(data); } else if (data == "没有找到该文件!") {alert(data); } else { $("video").attr("src", data); } } });
-
因提交的参数为文件类型则后台接受文件的参数也应为文件类型,而C#给我们提供了一个基类
HttpPostedFileBase
用于文件的处理,处理代码如下:public ActionResult UploadingVideo(HttpPostedFileBase file) { string src = ""; //判断文件是否为空 if (file != null) { //获取文件类型 string fileExtension = System.IO.Path.GetExtension(file.FileName); //自定义文件名(时间+唯一标识符+后缀) string fileName = DateTime.Now.ToString("yyyy-MM-dd") + Guid.NewGuid() + fileExtension; //判断是否存在需要的目录,不存在则创建 if (!Directory.Exists(Server.MapPath("~/Document/Temp/"))) { Directory.CreateDirectory(Server.MapPath("~/Document/Temp/"));} //拼接保存文件的详细路径 string filePath = Server.MapPath("~/Document/Temp/") + fileName; //若扩展名不为空则判断文件是否是指定视频类型 if (fileExtension != null) { if ("(.mp4)|(.avi)|(.flv)|(.rmvb)|(.wmv)".Contains(fileExtension)) { //保存文件 file.SaveAs(filePath); //拼接返回的Img标签 src = "/Document/Temp/" + fileName; } } else { src = "上传失败!";} } else {src = "没有找到该文件!";} return Json(src, JsonRequestBehavior.AllowGet); }
-
C#MVC中存在文件上传大小限制,与执行时间限制,因此在上传文件过大时则不能成功,可在
Web.Config
文件中配置限制上传文件大小与时间代码如下<system.web> <compilation debug="true" targetFramework="4.5"/> <!--请求长度--> <httpRuntime targetFramework="4.5" maxRequestLength="2147483647"/> </system.web> <system.webServer> <security> <requestFiltering> <!--允许上传的长度--> <requestLimits maxAllowedContentLength="2147483648"></requestLimits> </requestFiltering> </security> </system.webServer>