h5上传视频到服务端,存到指定位置,url保存到数据库,最后以特定格式显示
Posted Amy鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了h5上传视频到服务端,存到指定位置,url保存到数据库,最后以特定格式显示相关的知识,希望对你有一定的参考价值。
一、视频上传到服务器,存到指定位置。
试过n个方法中,最最靠谱的一个:
http://www.cnblogs.com/xdp-gacl/p/4200090.html
二、url保存到数据库
1、项目中新建一个jdbc包
新建类
package jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; public class JdbcUtil { private static String driver; private static String url; private static String user; private static String password; private static Properties pr=new Properties(); public JdbcUtil(){} static { try { pr.load(JdbcUtil.class.getClassLoader().getResourceAsStream("dbconfig.properties")); driver=pr.getProperty("driver"); url=pr.getProperty("dburl"); user=pr.getProperty("user"); password=pr.getProperty("password"); Class.forName(driver); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection() throws SQLException{ return DriverManager.getConnection(url,user,password); } public static void free(ResultSet rs,PreparedStatement st,Connection conn){ try { if(rs!=null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } finally{ try { if(st!=null) st.close(); } catch (SQLException e2) { e2.printStackTrace(); } finally{ try { if(conn!=null) conn.close(); } catch (SQLException e3) { e3.printStackTrace(); } } } } public boolean Write(String s) throws SQLException{ int n=0; Connection conn=getConnection(); PreparedStatement ps=null; try { ps=conn.prepareStatement(s); n=ps.executeUpdate(); if(n!=0) return true; } catch (Exception e) { e.printStackTrace(); } finally{ free(null, ps, conn); } return false; } }
2、src下新建一个
dbconfig.properties
driver=com.mysql.jdbc.Driver dburl=jdbc\\:mysql\\://localhost\\:3306/app?useUnicode=true&characterEncoding=UTF-8 user=root password=123456
3、新建一个包bean(实体类) 你要存入的可能不只是一个url吧,和一般的实体类一样,getter setter 有参无参的构造函数。
略
4、新建一个dao包
新建类
package dao; import java.sql.SQLException; import bean.Resourse; public interface ResourseDao { public boolean insert(Resourse r)throws SQLException; }
5、daoImpl包
新建类
package daoImpl; import java.sql.SQLException; import bean.Resourse; import dao.ResourseDao; import jdbc.JdbcUtil; public class ResourseDaoImpl implements ResourseDao { private JdbcUtil ju; public ResourseDaoImpl() { ju=new JdbcUtil(); } @Override public boolean insert(Resourse r) throws SQLException { String sql="insert into resourse values(0,\'"+r.getWord()+"\',\'"+r.getResourse_path()+"\',"+r.getIsused()+","+r.getQid()+",\'"
+r.getUphone()+"\')"; return ju.Write(sql); } }
6、在步骤一 大神写的servlet里加几句
package servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import bean.Resourse; import dao.ResourseDao; import daoImpl.ResourseDaoImpl; @WebServlet("/UploadServlet") public class UploadServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String value=""; ResourseDao rd=new ResourseDaoImpl();// new! response.setCharacterEncoding("utf-8"); //得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全 String savePath = this.getServletContext().getRealPath("/teach/video"); File file = new File(savePath); //判断上传文件的保存目录是否存在 if (!file.exists() && !file.isDirectory()) { System.out.println(savePath+"目录不存在,需要创建"); //创建目录 file.mkdir(); } //消息提示 String message = ""; try{ //使用Apache文件上传组件处理文件上传步骤: //1、创建一个DiskFileItemFactory工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //2、创建一个文件上传解析器 ServletFileUpload upload = new ServletFileUpload(factory); //解决上传文件名的中文乱码 upload.setHeaderEncoding("UTF-8"); //3、判断提交上来的数据是否是上传表单的数据 if(!ServletFileUpload.isMultipartContent(request)){ //按照传统方式获取数据 return; } //4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项 List<FileItem> list = upload.parseRequest(request); for(FileItem item : list){ //如果fileitem中封装的是普通输入项的数据 if(item.isFormField()){ String name = item.getFieldName(); //解决普通输入项的数据的中文乱码问题 value = item.getString("UTF-8"); //value = new String(value.getBytes("iso8859-1"),"UTF-8"); System.out.println(name + "=" + value); }else{//如果fileitem中封装的是上传文件 //得到上传的文件名称, String filenamee=item.getName(); String filename = "http://localhost:8080/soga/teach/video/"+item.getName();//new! //添加到数据库!!! filename=checkString(filename);//new! System.out.println(filename);//new! Resourse r=new Resourse(value,filename,0,"188*******");//这里是你自己写的实体类里的构造函数 System.out.println(rd.insert(r));//new! if(filenamee==null || filenamee.trim().equals("")){ continue; } //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\\a\\b\\1.txt,而有些只是单纯的文件名,如:1.txt //处理获取到的上传文件的文件名的路径部分,只保留文件名部分 filenamee = filenamee.substring(filenamee.lastIndexOf("\\\\")+1); //获取item中的上传文件的输入流 InputStream in = item.getInputStream(); //创建一个文件输出流 FileOutputStream out = new FileOutputStream(savePath + "\\\\" + filenamee); //创建一个缓冲区 byte buffer[] = new byte[1024]; //判断输入流中的数据是否已经读完的标识 int len = 0; //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据 while((len=in.read(buffer))>0){ //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\\\" + filename)当中 out.write(buffer, 0, len); } //关闭输入流 in.close(); //关闭输出流 out.close(); //删除处理文件上传时生成的临时文件 item.delete(); message = "文件上传成功!"; } } }catch (Exception e) { message= "文件上传失败!"; e.printStackTrace(); } request.setAttribute("message",message); request.getRequestDispatcher("/message.jsp").forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public String checkString(String str){ //new! String returnStr = ""; if(str.indexOf("\'") != -1){//判断字符串是否含有单引号 returnStr = str.replace("\'", "\'\'"); str = returnStr; } return str; } }
红色的是我新添加的。??怎么没有,不过我在新加的代码后注释了://new!
三、从数据库读出url,内容显示在网页上。
这里就和json有关了。完整步骤见:jsonp跨域访问servlet接口获取json数组,并且渲染数据,前后端完整
以上是关于h5上传视频到服务端,存到指定位置,url保存到数据库,最后以特定格式显示的主要内容,如果未能解决你的问题,请参考以下文章