激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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
主站蜘蛛池模板: 中文字幕在线播放一区 | 成人免费毛片一 | 狠狠干五月 | 免费在线观看午夜视频 | 免费a级毛片永久免费 | 在线a视频 | 精品国产一区二区三区天美传媒 | 欧美精品日日鲁夜夜添 | 最新中文字幕免费视频 | 免费黄色在线电影 | 色中色在线播放 | 爱视频福利| av免播放| 精品久久久久久综合日本 | 成人免费激情视频 | 国产成人高潮免费观看精品 | 欧美亚洲黄色 | 中文字幕在线观看国产 | 国产一级一国产一级毛片 | 成人9禁啪啪无遮挡免费 | www深夜成人 | 成人电影毛片 | 福利在线免费 | 欧美一级理论 | 色综合激情 | 亚洲va在线| 激情亚洲一区二区 | 国产一区二区三区黄 | 欧美一级片 在线播放 | 成人情欲视频在线看免费 | 不要插了h| 91短视频在线视频 | 女人裸体让男人桶全过程 | 中国成人在线视频 | 一区二区三区在线视频观看58 | 国产wwww | 国产免费一区二区三区最新不卡 | 色综合狠狠 | 日韩黄色一级视频 | 成人毛片免费播放 | 国产成人精品区一区二区不卡 |