您的位置:首页 > 其它

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

2012-08-12 14:51 447 查看
在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.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文件夹就是文件路径。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: