服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - ssm实现视频的上传与播放的示例代码

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

2021-09-10 12:17yuehailin Java教程

这篇文章主要介绍了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;
    }

页面展示:

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

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

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

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

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

原文链接:https://blog.csdn.net/yuehailin/article/details/80041413

延伸 · 阅读

精彩推荐
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7472021-02-04
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16