千家信息网

ssm怎么实现视频的上传和播放

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章将为大家详细讲解有关ssm怎么实现视频的上传和播放,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。视频上传:@RequestMapping(value = "
千家信息网最后更新 2026年11月04日ssm怎么实现视频的上传和播放

这篇文章将为大家详细讲解有关ssm怎么实现视频的上传和播放,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

视频上传:

@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,"");    }

视频播放:

@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 roles = new HashSet();        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怎么实现视频的上传和播放"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

用户 文件 数据 信息 视频 数据库 路径 密码 对象 方法 登录 成功 权限 篇文章 角色 加密 实体 情况 数据表 文件名 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网金融科技 港股互联网科技股 高科技与互联网 互联网科技缩写 左右互联网络科技 多迪互联网科技有限公司 开启互联网科技时代小说 互联网汽车科技小镇 昭通云南众福互联网科技有限公司 银川新华互联网科技职业技术培训学校图片 互联网科技项目计划书材料类 宜昌元轩互联网科技有限公司 洛阳昕诺飞互联网科技有限公司 电子科技大学互联网创业大赛 上海同邻互联网科技有限公司规模 世界互联网科技成果奖 互联网科技机房 上海旺乐尼互联网科技有限公司 恒生互联网科技趋势 东风日产互联网科技公司叫什么 天津市摩尔互联网科技 河南真二互联网科技有限公司 互联网科技公司官网 宜安科技 互联网金融 互联网科技产业特征 洛阳共同富裕互联网科技有限公司 互联网金融科技公司的优势 每天都有哪些好的互联网科技 福州德业互联网科技 黑龙江互联网科技公司
0