MVC下实现表单上传视频Servlet处理详解
2012-08-12 14:51
447 查看
在web开发中对于视频的处理必不可少,前台的视频播放功能也成为普遍应用。下面将近来做项目时做视频上传的具体步骤做一个记录:
1、首先一个上传的表单如下:
以上带HTML代码没有进行重复提交的处理,该处理在上一篇博客中重复提交处理
2、下载commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar两个归档文件放在lib目录下,下面将是提交时servlet的处理:
同时上传完后放入数据库中:
3、在部署后项目根目录下的upload文件夹就是文件路径。
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.FileName FileName 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存入文件的大小,以便后台管理空间,单位B Date 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文件夹就是文件路径。
相关文章推荐
- opencv-视频处理--dark channel -实现暗通道去雾详解
- asp.net mvc中实现视频自动上传
- 基于Spring3 MVC实现基于form表单上传Excel文件,批量导入数据时,报错:Unable to recognize OLE stream !
- servlet上传文件实现代码详解(四)
- 基于Spring3 MVC实现基于form表单文件上传
- Servlet实现文件上传详解与实战
- servlet实现form表单的文件上传
- Servlet实现文件上传到服务器(不用表单,直接用代码模拟表单提交)
- ajax实现文件上传以及后台servlet中的处理总结
- 在JSP表单提交中怎样在Servlet中处理文件上传并且获取JSP页面传过来的一些参数
- SpringMVC + FormDate + Vue + file表单 ( 实现 js 单文件和多文件上传 )
- mvc实现上传视频预览
- 原创:servlet技术实现用户名唯一的验证处理详解
- SpringMVC+BUI实现文件上传(附详解,源码下载)
- SpringMVC+BUI实现文件上传(附详解,源码下载)
- 基于Spring3 MVC实现基于HTML form表单文件上传
- Servlet处理表单重复提交and利用referer防盗链and实现request包含页面
- servlet 处理登陆表单数据(数据库)主要代码实现
- 使用servletfileupload实现表单文件和数据的一起上传
- SpringMVC+BUI实现文件上传(附详解,源码下载)