MVC下实现表单上传视频Servlet处理详解

来源:互联网 发布:淘宝详情页设计模版 编辑:程序博客网 时间:2024/05/29 13:41

    在web开发中对于视频的处理必不可少,前台的视频播放功能也成为普遍应用。下面将近来做项目时做视频上传的具体步骤做一个记录:

1、首先一个上传的表单如下:

<form action="VideoUploadServlet" method="post" enctype="multipart/form-data" name="theform" ><table bgcolor="#CCCCFF" width="900px"  ><tr bgcolor="#CCCCCC"><td colspan="3" align="center">(注:视频文件占用服务器空间较大,已控制上传的视频文件小于20M,可以提供上传的视频文件包括avi、MP4、flv、mov、wmv、3gp、swf、asf等类型的视频文件)<br/><br/><b>视频新闻上传</b><br/></td></tr><tr><td colspan="3"><br/></td></tr><tr><td>视频标题:</td><td><input type="text" size="60" name="title" id="title" /></td><td id="innert"><font  size='1px'>*必填</font></td></tr><tr><td colspan="3"><br/></td></tr><tr><td>视频文件:</td><td><input type="file" size="50" name="vedeo" /></td><td >*必填</td></tr><tr><td colspan="3"><br/></td></tr><tr><td>视频转码类型:</td><td><select name="qscale"><option value="6" selected>标准转码----默认编码转码</option>  <option value="4" >高品质转码----视频文件大小会增加较多(空间大时可使用)</option>  </select><br/></td><td >*默认为标准转码</td></tr><tr><td colspan="3"><br/></td></tr><tr align="center"><td colspan="3"><input type="button" value="上传" name="but" onClick="checkSubmit();"><input type="reset" value="重置"></td></tr><tr><td colspan="3" align="center" id="cache"></td></tr></table></form>

以上带HTML代码没有进行重复提交的处理,该处理在上一篇博客中重复提交处理

2、下载commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar两个归档文件放在lib目录下,下面将是提交时servlet的处理:

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");HttpSession session=request.getSession();//先创建一个存储文件的文件夹(目录),有的话不创建 File f=new File(this.getServletContext().getRealPath("/") + "uploadvideo");f.mkdir();DiskFileItemFactory factory = new DiskFileItemFactory() ;// 更准确的说是创建一个上传时的一个临时文件,也放在该目录下//factory.setRepository(new File(this.getServletContext().getRealPath("/") + "uploadvideo")) ;ServletFileUpload upload = new ServletFileUpload(factory) ;// 设置一次只能最大上传20M,但下面有判断,这里就不再设定//upload.setFileSizeMax(20*1024*1024) ;//将表单信息全部拿过来,放在一个List中List<FileItem> items = null;try {items = upload.parseRequest(request);} catch (FileUploadException e) {e.printStackTrace();} // 以上是接收全部内容,再放到一个迭代器中以便于输出Iterator<FileItem> iter = items.iterator() ;//调用定义的文件重命名的类com.util.FileNameFileName its = new FileName() ;boolean isupload=true;  //参数判断是否上传了long videosize=0;String fileRoot="";//视频文件路径String fend="";//上传的文件后缀名String ftime="";//文件的时间戳Vector<String>  vpara=new Vector(); //存放上传的文本参数while(iter.hasNext()){FileItem item = iter.next() ;//String fieldName = item.getFieldName() ;// 取得表单控件的名称//没有填写完整时弹出警告if(item.getString().equals("")){request.setAttribute("info", "没有填写标题或文件,上传失败!");request.getRequestDispatcher("isUpload.jsp").forward(request, response);isupload=false;break;}if(!item.isFormField())// 不是普通文本时,时视频时将视频上传到指定文件夹{//取得上传的视频的大小videosize=item.getSize();fend=item.getName().split("\\.")[1].toLowerCase();if(!fend.equals("avi")&&!fend.equals("mp4")&&!fend.equals("mov")&&!fend.equals("swf")&&!fend.equals("wmv")&&!fend.equals("3gp")&&!fend.equals("flv")&&!fend.equals("asf")){request.setAttribute("info", "文件只能为avi、MP4、flv、mov、wmv、3gp、swf、asf等类型的视频文件,非此类别文件可以下载视频转码器转码后上传");request.getRequestDispatcher("isUpload.jsp").forward(request, response);isupload=false;break;}else if(videosize>20*1024*1024){request.setAttribute("info", "文件大小超过20M,上传失败。");request.getRequestDispatcher("isUpload.jsp").forward(request, response);isupload=false;break;}else{InputStream input = null ;OutputStream output = null ;input = item.getInputStream() ;ftime=its.getIPTimeRand();fileRoot=this.getServletContext().getRealPath("/")+"uploadvideo"+File.separator+ftime;output = new FileOutputStream(new File(fileRoot+"."+fend)) ;int temp = 0 ;byte data[] = new byte[512] ;while((temp=input.read(data,0,512))!=-1){output.write(data) ;// 分块保存}input.close() ;output.close() ;}} else { String value= item.getString(); vpara.add(value);}}

同时上传完后放入数据库中:

//上传成功便将该条记录存入数据库String nid =String.valueOf(videosize);   //与其他文章不同,为了使用同一个表,将Nid存入文件的大小,以便后台管理空间,单位BDate date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddhhmmss");String str = sdf.format(date); String time = str.substring(0,10);int number = 0 ;String createuser="";createuser=(String)session.getAttribute("user");String content="uploadvideo"+File.separator+ftime+".flv";String attribute="spxw";String table="news";String file="uploadvideo"+File.separator+ftime+".jpg";…………这里插入数据库……    if(n!=-1){request.setAttribute("info", "视频文件上传成功!");}else{    request.setAttribute("info","视频上传失败,数据库未连接!");    }request.getRequestDispatcher("isUpload.jsp").forward(request, response);}}}


3、在部署后项目根目录下的upload文件夹就是文件路径。