ssm实现视频的上传与播放的示例代码

实现的功能:

1:实现视频的上传与播放。

2:使用shiro框架进行登录注册。

3:视频分页展示在页面上。

4:视频简介

5:视频评论

6:发表评论

简单介绍一下大概实现的思路:

首先主要的功能就是实现视频的上传与播放,那么我们就需要一个视频上传的界面,选择视频进行上传,那么上传到哪儿呢?

这里我们有多重选择,第一:我们可以将视频转换格式存在我们tomcat服务器里面,然后在数据库里面存入tomcat中对应的文件的路径。第二:我们可以使用nginx来存储我们的网页的静态资源。今天我就介绍上面一个简单的。

对于视频的简介,评论,以及发表评论无非就是对数据库中进行增删改查。

那么我们下面就来简单的介绍一下核心代码。

视频上传:

@RequestMapping(value = "dofunction", method = RequestMethod.POST)
    public void handler(HttpServletRequest request, HttpServletResponse response,
                        @RequestParam("myvideo") MultipartFile file) throws IOException {
        String message = "";
        try {
            Video media = new Video();
            // 解析数据
            media.setName(request.getParameter("name"));
            media.setDescription(request.getParameter("description"));
            boolean flag = false; // 转码成功与否的标记
            // 上传文件
            ServletContext sctx = request.getServletContext();
            // 获得保存文件的路径
            String basePath = sctx.getRealPath("videos");
            // 获得文件名
            String fileUrl = file.getOriginalFilename();
            // 在某些操作系统上,item.getName()方法会返回文件的完整名称,即包括路径
            String fileType = fileUrl.substring(fileUrl.lastIndexOf(".")); // 截取文件格式
            // 自定义方式产生文件名
            String serialName = String.valueOf(System.currentTimeMillis());
            // 待转码的文件
            File uploadFile = new File(basePath + "/temp/" + serialName + fileType);

            // 保存文件
            Streams.copy(file.getInputStream(),new FileOutputStream(uploadFile.getAbsolutePath()),true);
            // 判断文件的大小
            if (file.getSize() > 500 * 1024 * 1024) {
                message = "上传失败!您上传的文件太大,系统允许最大文件500M";
            }
            String codcFilePath = basePath + "/" + serialName + ".flv"; // 设置转换为flv格式后文件的保存路径
            String mediaPicPath = basePath + "/images" + File.separator + serialName + ".jpg"; // 设置上传视频截图的保存路径

            // 获取配置的转换工具(ffmpeg.exe)的存放路径
            String ffmpegPath = request.getServletContext().getRealPath("/tools/ffmpeg.exe");

            media.setAddress("videos/" + serialName + ".flv");
            media.setPicture("videos/images/" + serialName + ".jpg");
            media.setUptime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis())));
            // 转码
            flag = serviceFactory.getMediaService().executeCodecs(ffmpegPath, uploadFile.getAbsolutePath(),
                    codcFilePath, mediaPicPath);

            if (flag) {
                // 转码成功,向数据表中添加该视频信息
                serviceFactory.getMediaService().saveMedia(media);
                message="上传成功";
            }
            request.setAttribute("message", message);
        } catch (Exception e) {
            e.printStackTrace();
        }
        MyWebPrinter.print(response,"<script>alert('"+message+"');window.location.href='indexing.cphtml';</script>");
    }

视频播放:

@RequestMapping("play")
    public String play(int id, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String idstr = id + "";
        int mediaId = -1;
       Video media = null;
        if (null != idstr) {
            mediaId = Integer.parseInt(idstr);
        }
        try {
            media = serviceFactory.getMediaService().queryMediaById(mediaId);
            System.out.println(media.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
        request.setAttribute("media", media);
        return "video-detail";
    }

用户使用shiro安全框架进行登录:

public class ShiroRealm extends AuthorizingRealm{

    @Autowired
    UserService userService;

    protected AuthenticationInfo doGetAuthenticationInfo
            (AuthenticationToken authenticationToken) throws AuthenticationException {
        //此处的authenticationToken和controller中的UsernamePasswordToken是同一个,是controller中传过来的
        //System.out.println("doGetAuthenticationInfo " + authenticationToken.hashCode());

        //1. 把 AuthenticationToken 转换为 UsernamePasswordToken
        UsernamePasswordToken upToken = (UsernamePasswordToken) authenticationToken;

        //2. 从 UsernamePasswordToken 中来获取 username
        String username = upToken.getUsername();

        //3. 调用数据库的方法, 从数据库中查询 username 对应的用户记录(登录名和密码)
        //System.out.println("从数据库中获取 username: " + username + " 所对应的用户信息.");
        User user = userService.findUserByEmail(username);
        System.out.println(user.getEmail() + ", " + user.getPassword());

        //4. 若用户不存在, 则可以抛出 UnknownAccountException 异常
//        if("unknown".equals(username)){
//            throw new UnknownAccountException("用户不存在!");
//        }

        //5. 根据用户信息的情况, 决定是否需要抛出其他的 AuthenticationException 异常
//        if("monster".equals(username)){
//            throw new LockedAccountException("用户被锁定");
//        }

        //6. 根据用户的情况来构建 AuthenticationInfo对象并返回 通常用的实现类为: SimpleAuthenticationInfo
        //以下信息是从数据库中获取的.
        //(1). principal : 认证的实体信息 可以是 username 也可以是数据表对应的用户的实体类对象
        Object principal = username;
        //(2). credentials : 密码.
        Object credentials = null;
        if(user.getEmail().equals(username)){
            credentials = user.getPassword();
        }
        //(3). realmName : 当前realm对象的name 调用父类的getName()方法即可
        String realmName = getName();
        //(4). salt : 盐值 这里用username作为盐值 因为用户名是唯一的
        ByteSource salt = ByteSource.Util.bytes(username);

        SimpleAuthenticationInfo info = null;
        info = new SimpleAuthenticationInfo(principal,credentials,salt,realmName);

        return info;
    }

    //测试获取加密后的密码 本例原密码123456,加密2次
    public static void main(String[] args) {
        String hashAlgorithmName = "MD5";
        Object credentials = "123456";
        //Object salt = ByteSource.Util.bytes("lewy@9.com");//9be0a8423bbe47b9ab62b964d0e5b434
        Object salt = ByteSource.Util.bytes("muller@25.com");//9c377556e3611b4e4fe3d844f1a7135a
        int hashIterations = 2;

        //将一个字符串进行MD5加密
        Object result = new SimpleHash(hashAlgorithmName, credentials, salt, hashIterations);
        System.out.println(result);
    }

    //授权会被shiro回调的方法
    protected AuthorizationInfo doGetAuthorizationInfo
               (PrincipalCollection principalCollection) {
        //1. 从 PrincipalCollection 中来获取登录用户的信息
        //   注意如果是多realm,获取的principal也是有顺序的
        Object principal = principalCollection.getPrimaryPrincipal();

        //2. 利用登录的用户的信息来查用户当前用户的角色或权限(可能需要查询数据库)
        User_Role user_role = userService.findUserRoleByEmail((String) principal);
        System.out.println("角色为:" + user_role.getRole_name());

        Set<String> roles = new HashSet<String>();
        roles.add("user");//给所有用户添加user权限
        if(user_role.getRole_name().equals("admin")){
            roles.add(user_role.getRole_name());//如果用户的角色是admin,再添加一个admin权限
        }

        //3. 创建 SimpleAuthorizationInfo, 并设置其 roles 属性.
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles);

        //4. 返回 SimpleAuthorizationInfo 对象.
        return info;
    }

页面展示:

实现的过程,controller调用service中的方法,将结果呈现给在jsp页面上,然后service层调用dao层中的对数据库操作的方法。

注:视频上传是将视频上传到tomcat服务器上面,当服务器处于开着的状态可以进行视频的播放,当服务器
关掉之后视频将清空,如果tomcat设置的是关闭之后,将清空tomcat中的缓存,就会出现在mysql数据库中的存储的视频地址将失效,当然如果上传的视频保存在项目根路径下,那么就不会出现这种情况。

到此这篇关于ssm实现视频的上传与播放的示例代码的文章就介绍到这了,更多相关ssm 视频上传播放内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • ssm框架上传图片保存到本地和数据库示例

    本文介绍了ssm框架上传图片保存到本地和数据库示例,主要使用了Spring+SpringMVC+MyBatis框架,实现了ssm框架上传图片的实例,具体如下: 1.前台部分 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head&g

  • SSM整合中的Log4j日志的配置详情

    在网上搜索了很多的log的配置方法,当然结果很多,但是没有一个是我想要的.没办法只能自己去试了.只说如何在项目中引入log4j来显示日志的输出.当然配置文件是少不了的. 配置 log4j.properties 在SSM整合的项目中会有文件夹src/main/resources 所有的资源型文件都要放在这个resource下面(个人习惯,也可以放在其让地方) ### Log4j配置 ### ### 与Spring结合需要在web.xml中指定此文件位置,并添加监听器 ### #定义log4j的输出

  • 使用eclipse + maven一步步搭建SSM框架教程详解

    SSM (SSM 框架集) SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. SpringMVC分离了控制器.模型对象.分派器以及处理程序对象的角色,这种分离让它们更容易进行定制. MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架. 0.系统环境 1)Windows

  • SSM 实现登录验证码功能(附源码)

    如果想用框架来实现验证码,可以看我的另外一篇: Kaptcha 框架的使用很简单的.新手必备. https://www.jb51.net/article/152260.htm 一.效果图 二.实现代码 第一步:先建一个 RandomValidateCode.java 作为工具类.把下面的代码直接复制粘贴即可. package com.utils; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; impo

  • SpringMVC之简单的增删改查示例(SSM整合)

    虽然已经在做关于SpringMVC的项目.但是还没有写一些比较系统的博客.今天就先来说一说最简单的增删改查吧.这个例子是基于SpringMVC+Spring+Mybatis实现的. 环境配置 主要是几项配置:springmvc的配置,spring的配置,MyBatis的配置,jdbc的配置,和web.xml配置 springmvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&qu

  • ssm实现分页查询的实例

    ssm整合实现分页查询 一.通过limit查询语句实现分页,并展示 1.mapper.xml配置 <select id="selectUsersByPage" parameterType="int" resultMap="UserMap"> SELECT * number from user limit #{page},10 </select> 查询user表,从第page项开始,每次返回10条数据 2.index.jsp

  • ssm实现视频的上传与播放的示例代码

    实现的功能: 1:实现视频的上传与播放. 2:使用shiro框架进行登录注册. 3:视频分页展示在页面上. 4:视频简介 5:视频评论 6:发表评论 简单介绍一下大概实现的思路: 首先主要的功能就是实现视频的上传与播放,那么我们就需要一个视频上传的界面,选择视频进行上传,那么上传到哪儿呢? 这里我们有多重选择,第一:我们可以将视频转换格式存在我们tomcat服务器里面,然后在数据库里面存入tomcat中对应的文件的路径.第二:我们可以使用nginx来存储我们的网页的静态资源.今天我就介绍上面一个

  • java后台接收app上传的图片的示例代码

    整理文档,搜刮出一个java后台接受app上传的图片的示例代码,稍微整理精简一下做下分享 package com.sujinabo.file; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID; import javax.servlet.S

  • jQuery加PHP实现图片上传并提交的示例代码

    图片上传思路:通过ajax实现图片上传,然后把PHP返回的图片地址,加入到隐藏字段中,最后通过表单提交给后台PHP,代码如下 HTML代码 zimg.html文件: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-wid

  • vue+axios实现图片上传识别人脸的示例代码

    目录 Axios请求 Qs处理数据分析 Vant上传文件格式 完整代码 本文主要介绍了vue+axios实现图片上传识别人脸的示例代码,分享给大家,具体如下: 先看最终效果: 这里采用的是vant的文件上传组件,通过上传图片后端识别图片里的人脸,返回到前端,获取该人脸匹配的工号或学号.以便后续其他系统使用,比如上传成功了一个人脸照片识别成功,可以通过人脸开启会议室的门禁.目前只是做了一个人脸上传的效果. Axios请求 使用axios请求数据,method:post时,data默认的传参数据类型

  • PHP实现文件上传和下载的示例代码

    目录 1.效果图 2.首先是封装好的图片类(缩放及生成水印) 1.GDBasic.php 2.Image.php 3.ajax类封装文件 1.index.php 2.图片相关功能处理 3.封装好的文件上传类 4.搜索功能实现 4.最后数据库格式 1.效果图 2.首先是封装好的图片类(缩放及生成水印) 1.GDBasic.php <?php /** * GDBasic.php * description GD基础类 */ namespace test\Lib; class GDBasic { pr

  • SpringMVC文件上传及查看的示例代码

    写在前面 谈到文件上传,首先要说业务逻辑,如果上传的文件大家都可以看(比如广告或者首页的banner)等,那么我们就把图片放在静态资源区(与css,js一样的位置)中,如果文件是受保护的(像用户只能查看自己上传的照片),那么我们就把它存放在服务器中的某个专门存放图片的位置. 本例分别展示了存放在两个位置的上传文件的方法,上传之后,作为延伸,还添加了查看上传的文件以及下载已经上传的文件的功能. 准备工作 配置SpringMVC,导入commons包 在mvc-servlet.xml中配置文件上传解

  • Vue的移动端多图上传插件vue-easy-uploader的示例代码

    前言 这段时间赶项目,需要用到多文件上传,用Vue进行前端项目开发.在网上找了不少插件,都不是十分满意,有的使用起来繁琐,有的不能适应本项目.就打算自己折腾一下,写一个Vue的上传插件,一劳永逸,以后可以直接使用. 目前vue-easy-uploader已上传到GitHub和NPM,使用起来方便简单,不需要繁琐的配置即可投入生产,不过需要后端配合,实现上传接口. 本项目GitHub地址: https://github.com/quanzaiyu/vue-easy-uploader 本项目NPM地

  • 用element的upload组件实现多图片上传和压缩的示例代码

    我用vuex做状态管理,七牛云做图床. 项目地址:多图片上传组件 效果展示 项目执行流程 首先,让我们来分析一下实现多图片上传的流程: 前端向后端请求用来上传图片至服务器的token 后端为每张要上传的图片生成一个图片名,并用这个图片名生成token 后端将图片名和token返回给前端 前端拿到token以后,将图片上传至服务器 上传成功以后,前端将图片名发给后端 后端将图片名存入数据库 项目实现过程 1.我们要利用element-ui的Upload组件布置界面: //upload.vue <e

  • Spring Boot 文件上传与下载的示例代码

    文件的上传及下载功能是开发人员在日常应用及编程开发中经常会遇到的.正好最近开发需要用到此功能,虽然本人是 Android 开发人员,但还是业余客串了一下后台开发. 在本文中,您将学习如何使用 Spring Boot 实现 Web 服务中的文件上传和下载功能.首先会构建一个 REST APIs 实现上传及下载的功能,然后使用 Postman 工具来测试这些接口,最后创建一个 Web 界面使用 JavaScript 调用接口演示完整的功能.最终界面及功能如下: 项目环境 - Spring Boot

  • vue+springboot图片上传和显示的示例代码

    一.前言 在使用spring boot做后台系统,vue做前端系统,给客户开发一套系统时候,其中用到了图片上传和显示的功能. 二.环境 前端:vue 前端组件:tinymce 后台:spring boot:2.2.3 三.正文 在客户开发一套门户管理系统时,集成了tinymce组件,用于编辑内容,springboot不同于其他项目.  是集成tomcat的,文件和图片是不能直接访问的.所以我在做集成富文本编辑器时,需要处理图片的问题. 这个问题跟上传头像等显示图片的功能是类似的.下面记录详情步骤

随机推荐