C#MVC视频上传并实现页面播放

开发工具与关键技术:MVC、C#、jQuery
作者:张俊辉
撰写时间:2019年05月17日

核心思路:在页面实现文件上传,然后在后台判断上传的文件是否为空,判断是否为视频类型,判断储存路径是否存在,若不存在则新增储存路径,最后保存文件到储存路径并返回文件的相对路径。

  1. 在页面实现文件上传时需要申明FormData对象,用以将数据编译成键值对并存放文件;代码如下:

    //获取文件
        var files = $("#form input").prop("files")[0];
        //声明FormData对象
        var formData = new FormData();
        //向FormData对象添加文件
        formData.append("file", files);
    
  2. 在通过$.ajax提交时需要设置的两个参数contentTypeprocessDatafalse;
    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);
                       	  }                
    				}
    });
    
  3. 因提交的参数为文件类型则后台接受文件的参数也应为文件类型,而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);
            }
    
  4. 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>
    
    

你可能感兴趣的:(专题技术)