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.Parameter("name"));
media.Parameter("description"));
boolean flag = false; // 转码成功与否的标记
// 上传⽂件
ServletContext sctx = ServletContext();
// 获得保存⽂件的路径
String basePath = RealPath("videos");
// 获得⽂件名
String fileUrl = OriginalFilename();
// 在某些操作系统上,Name()⽅法会返回⽂件的完整名称,即包括路径
String fileType = fileUrl.substring(fileUrl.lastIndexOf(".")); // 截取⽂件格式
// ⾃定义⽅式产⽣⽂件名
String serialName = String.valueOf(System.currentTimeMillis());
// 待转码的⽂件
File uploadFile = new File(basePath + "/temp/" + serialName + fileType);
// 保存⽂件
// 判断⽂件的⼤⼩
if (Size() > 500 * 1024 * 1024) {
message = "上传失败!您上传的⽂件太⼤,系统允许最⼤⽂件500M";
}
String codcFilePath = basePath + "/" + serialName + ".flv"; // 设置转换为flv格式后⽂件的保存路径
String mediaPicPath = basePath + "/images" + File.separator + serialName + ".jpg"; // 设置上传视频截图的保存路径
// 获取配置的转换⼯具()的存放路径
String ffmpegPath = ServletContext().getRealPath("/");
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 = MediaService().executeCodecs(ffmpegPath, AbsolutePath(),
codcFilePath, mediaPicPath);
if (flag) {
// 转码成功,向数据表中添加该视频信息ssm框架实现登录功能
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 = MediaService().queryMediaById(mediaId);
System.out.String());
} 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 = Username();
//3. 调⽤数据库的⽅法, 从数据库中查询 username 对应的⽤户记录(登录名和密码)
//System.out.println("从数据库中获取 username: " + username + " 所对应的⽤户信息.");
User user = userService.findUserByEmail(username);
System.out.Email() + ", " + Password());
//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;
Email().equals(username)){
credentials = Password();
}
//(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");//9be0a8423bbe47b9ab62b964d0e5b434        Object salt = ByteSource.Util.bytes("muller@25");//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 = PrimaryPrincipal();
//2. 利⽤登录的⽤户的信息来查⽤户当前⽤户的⾓⾊或权限(可能需要查询数据库)
User_Role user_role = userService.findUserRoleByEmail((String) principal);
System.out.println("⾓⾊为:" + Role_name());
Set<String> roles = new HashSet<String>();
roles.add("user");//给所有⽤户添加user权限
if(Role_name().equals("admin")){
roles.add(Role_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 视频上传播放内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。