JavaWeb_(视频网站)_五、视频模块1 视频上传

视频模块

保存视频流程图

JavaWeb_(视频网站)_五、视频模块1 视频上传

提交博客页面 submit-post-blog.html

提交视频页面 submit-post-video.html

在上传视频请求@RequestMapping(“/submitPostVideo”)中添加数据

@RequestMapping("/submitPostVideo")
    public String submitPostVideo(Model model)
    {
        User user = (User)session.getAttribute("user");
        baseDataUtils.getData(model, user.getId().toString() );

        List catagoryList = catagoryService.findAllCatagory();
        model.addAttribute("catagoryList",catagoryList);

        return "submit-post-video.html";
    }

将提交视频页面submit-post-video.html前端页面相同功能模仿提交博客页面 submit-post-blog.html

完善submit-post-video.html上传视频页面(二级分类->Tag->富文本->视频上传)

添加文本框,处理图片上传、表情包

添加一级分类,二级分类

在腾讯云控制台中获得访问视频上传权限的appid和appkey

JavaWeb_(视频网站)_五、视频模块1 视频上传

通过videoSign()函数得到视频上传访问的权限

//得到签名
    @RequestMapping("/videoSign")
    @ResponseBody
    public String videoSign()
    {
        Signature sign = new Signature();
        sign.setSecretId("AKIDkNsDQWZOYYVSHu49kDh9Uh1FSo3BsnLm");
        sign.setSecretKey("XDn1a3NWzN0Tp4vH3zpSp5fEX2Rq9KYg");
        sign.setCurrentTime(System.currentTimeMillis() / 1000);
        sign.setRandom(new Random().nextInt(java.lang.Integer.MAX_VALUE));
        sign.setSignValidDuration(3600 * 24 * 2);
        String signature = "";
        try {
            signature = sign.getUploadSignature();
            System.out.println("signature : " + signature);
        } catch (Exception e) {
            System.out.print("获取签名失败");
            e.printStackTrace();
        }
        return signature;
    }

JavaWeb_(视频网站)_五、视频模块1 视频上传JavaWeb_(视频网站)_五、视频模块1 视频上传
package com.Gary.betobe.controller;

import java.util.List;
import java.util.Random;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.Gary.betobe.domain.Catagory;
import com.Gary.betobe.domain.User;
import com.Gary.betobe.service.CatagoryService;
import com.Gary.betobe.utils.BaseDataUtils;
import com.Gary.betobe.utils.Signature;

@Controller
public class VideoController {

    @Autowired
    private BaseDataUtils baseDataUtils;

    @Autowired
    private HttpSession session;

    @Autowired
    private CatagoryService catagoryService;

    //得到签名
    @RequestMapping("/videoSign")
    @ResponseBody
    public String videoSign()
    {
        Signature sign = new Signature();
        sign.setSecretId("AKIDkNsDQWZOYYVSHu49kDh9Uh1FSo3BsnLm");
        sign.setSecretKey("XDn1a3NWzN0Tp4vH3zpSp5fEX2Rq9KYg");
        sign.setCurrentTime(System.currentTimeMillis() / 1000);
        sign.setRandom(new Random().nextInt(java.lang.Integer.MAX_VALUE));
        sign.setSignValidDuration(3600 * 24 * 2);
        String signature = "";
        try {
            signature = sign.getUploadSignature();
            System.out.println("signature : " + signature);
        } catch (Exception e) {
            System.out.print("获取签名失败");
            e.printStackTrace();
        }
        return signature;
    }

    @RequestMapping("/submitPostVideo")
    public String submitPostVideo(Model model)
    {
        User user = (User)session.getAttribute("user");
        baseDataUtils.getData(model, user.getId().toString() );

        List catagoryList = catagoryService.findAllCatagory();
        model.addAttribute("catagoryList",catagoryList);

        return "submit-post-video.html";
    }

    @RequestMapping("/singleVideoV2")
    public String singleVideoV1()
    {
        return "single-video-v2.html";
    }
}

VideoController.java

JavaWeb_(视频网站)_五、视频模块1 视频上传JavaWeb_(视频网站)_五、视频模块1 视频上传

JavaWeb_(视频网站)_五、视频模块1 视频上传

需要再表单中给页面传递三个参数:videoUrl、coverImage、videoFileId

  <input id="videoUrl" name="videoUrl" required="required" hidden="hidden">
  <input id="videoFileId" name="videoFileId" required="required" hidden="hidden">
  <input id="coverImage"name="coverImage" required="required" hidden="hidden">

JavaWeb_(视频网站)_五、视频模块1 视频上传JavaWeb_(视频网站)_五、视频模块1 视频上传
  <form data-abide novalidate>
                                            <div data-abide-error class="alert callout submit-post" style="display: none;">
                                                <p><i class="fa fa-exclamation-triangle">i>
                                                    There are some errors in your form.p>
                                            div>
                                            <div class="row">
                                                <div class="large-12 columns submit-post">
                                                    <label>Title
                                                        <input type="text" placeholder="enter you video title..." required>
                                                        <span class="form-error">
                                                            Yo, you had better fill this out, it's required.
                                                    </span><span><span>span</span><span>&gt;</span>
                                                <span><span>label</span><span>&gt;</span>
                                            <span><span>div</span><span>&gt;</span>

                                               <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns submit-post&quot;</span><span>&gt;</span>
                                                    <span>&lt;</span><span>label</span><span>&gt;</span><span>Meta keywords:
                                                        </span><span>&lt;</span><span>textarea </span><span>placeholder</span><span>=&quot;enter meta keywords&quot;</span><span>&gt;<span>textarea</span><span>&gt;</span>
                                                    <span><span>label</span><span>&gt;</span>
                                                    <span>&lt;</span><span>p</span><span>&gt;</span>IF you want to put your custom meta Keywords then put here otherwise your post Keywords will be the default meta Keywords<span><span>p</span><span>&gt;</span>
                                                <span><span>div</span><span>&gt;</span>

                                            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns&quot;</span><span>&gt;</span>
                                            <span>&lt;</span><span>span </span><span>class</span><span>=&quot;submit-post&quot;</span><span>&gt;</span>
                                                <span>&lt;</span><span>label</span><span>&gt;</span><span>Description

                                                </span><span><span>label</span><span>&gt;</span>

                                            <span><span>span</span><span>&gt;</span>

                                                    <span>&lt;</span><span>div </span><span>class</span><span>=&quot;summernote&quot;</span><span>&gt;<span>div</span><span>&gt;</span>

                                            <span><span>div</span><span>&gt;</span>
                                            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns submit-post&quot;</span><span>&gt;</span>
                                                <span>&lt;</span><span>h6 </span><span>class</span><span>=&quot;borderBottom&quot;</span><span>&gt;</span>Choose Video File And Cover:<span><span>h6</span><span>&gt;</span>
                                            <span><span>div</span><span>&gt;</span>

                                            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns submit-post&quot;</span><span>&gt;</span>
                                                <span>&lt;</span><span>div </span><span>class</span><span>=&quot;upload-video&quot;</span><span>&gt;</span>
                                                    <span>&lt;</span><span>label </span><span>for</span><span>=&quot;videoUpload&quot;</span><span> class</span><span>=&quot;button&quot;</span><span>&gt;</span>Upload File<span><span>label</span><span>&gt;</span>
                                                    <span>&lt;</span><span>input </span><span>onchange</span><span>=&quot;videoFileChange(this)&quot;</span><span> required</span><span>=&quot;required&quot;</span><span> type</span><span>=&quot;file&quot;</span><span> id</span><span>=&quot;videoUpload&quot;</span><span> class</span><span>=&quot;show-for-sr&quot;</span><span>&gt;</span>
                                                    <span>&lt;</span><span>span </span><span>id</span><span>=&quot;videoFileSpan&quot;</span><span>&gt;</span>No file chosen<span><span>span</span><span>&gt;</span>
                                                <span><span>div</span><span>&gt;</span>
                                                <span>&lt;</span><span>br</span><span>&gt;</span>
                                                <span>&lt;</span><span>div </span><span>class</span><span>=&quot;upload-video&quot;</span><span>&gt;</span>
                                                    <span>&lt;</span><span>label </span><span>for</span><span>=&quot;imgUpload&quot;</span><span> class</span><span>=&quot;button&quot;</span><span>&gt;</span>Upload Cover<span><span>label</span><span>&gt;</span>
                                                    <span>&lt;</span><span>input </span><span>onchange</span><span>=&quot;coverFileChange(this)&quot;</span><span> required</span><span>=&quot;required&quot;</span><span> type</span><span>=&quot;file&quot;</span><span> id</span><span>=&quot;imgUpload&quot;</span><span> class</span><span>=&quot;show-for-sr&quot;</span><span>&gt;</span>
                                                    <span>&lt;</span><span>span </span><span>id</span><span>=&quot;videoCoverSpan&quot;</span><span>&gt;</span>No Cover chosen<span><span>span</span><span>&gt;</span>
                                                <span><span>div</span><span>&gt;</span>
                                                <span>&lt;</span><span>br</span><span>&gt;</span>
                                                   <span>&lt;</span><span>a </span><span>href</span><span>=&quot;javascript:void(0);&quot;</span><span> onclick</span><span>=&quot;uploadVOD()&quot;</span><span> style</span><span>=&quot;background: #656fc3;border-bottom: 3px solid #424da9&quot;</span><span> class</span><span>=&quot;button&quot;</span><span>&gt;</span><span>
                                                    Upload Video
                                                </span><span><span>a</span><span>&gt;</span>
                                            <span><span>div</span><span>&gt;</span>
                                           <span>&lt;</span><span>input </span><span>id</span><span>=&quot;videoUrl&quot;</span><span> name</span><span>=&quot;videoUrl&quot;</span><span> required</span><span>=&quot;required&quot;</span><span> hidden</span><span>=&quot;hidden&quot;</span><span>&gt;</span>
                                           <span>&lt;</span><span>input </span><span>id</span><span>=&quot;videoFileId&quot;</span><span> name</span><span>=&quot;videoFileId&quot;</span><span> required</span><span>=&quot;required&quot;</span><span> hidden</span><span>=&quot;hidden&quot;</span><span>&gt;</span>
                                           <span>&lt;</span><span>input </span><span>id</span><span>=&quot;coverImage&quot;</span><span>name</span><span>=&quot;coverImage&quot;</span><span> required</span><span>=&quot;required&quot;</span><span> hidden</span><span>=&quot;hidden&quot;</span><span>&gt;</span>
                                            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns&quot;</span><span>&gt;</span>

                                                <span>&lt;</span><span>div </span><span>class</span><span>=&quot;post-category submit-post&quot;</span><span>&gt;</span>
                                                    <span>&lt;</span><span>label</span><span>&gt;</span><span>Choose Video Category:
                                                        </span><span>&lt;</span><span>select</span><span>&gt;</span>
                                                            <span>&lt;</span><span>option </span><span>th:each</span><span>=&quot;catagory:${catagoryList}&quot;</span><span>  th:onclick</span><span>=&quot;catagoryClick([[${#setUtils.getSubCatagorys(catagory.subCatagorys)}]],[[${catagory.id}]])&quot;</span><span>  th:text</span><span>=&quot;${catagory.catagory}&quot;</span><span>&gt;</span>one<span><span>option</span><span>&gt;</span>
                                                        <span><span>select</span><span>&gt;</span>
                                                        <span>&lt;</span><span>input </span><span>id</span><span>=&quot;catagoryIdInput&quot;</span><span> name</span><span>=&quot;catagoryId&quot;</span><span> type</span><span>=&quot;text&quot;</span><span> style</span><span>=&quot;display: none;&quot;</span><span> required</span><span>=&quot;required&quot;</span><span>&gt;</span>
                                                    <span><span>label</span><span>&gt;</span>
                                                <span><span>div</span><span>&gt;</span>

                                                <span>&lt;</span><span>div </span><span>class</span><span>=&quot;post-category submit-post&quot;</span><span>&gt;</span>
                                                    <span>&lt;</span><span>label</span><span>&gt;</span><span>Choose Video Sub-Category:
                                                        </span><span>&lt;</span><span>select </span><span>id</span><span>=&quot;subCatagoryId&quot;</span><span>&gt;</span>
                                                            <span>&lt;</span><span>option </span><span>value</span><span>=&quot;&quot;</span><span>&gt;</span>one<span><span>option</span><span>&gt;</span>
                                                            <span>&lt;</span><span>option </span><span>value</span><span>=&quot;&quot;</span><span>&gt;</span>two<span><span>option</span><span>&gt;</span>
                                                            <span>&lt;</span><span>option </span><span>value</span><span>=&quot;&quot;</span><span>&gt;</span>three<span><span>option</span><span>&gt;</span>
                                                        <span><span>select</span><span>&gt;</span>
                                                        <span>&lt;</span><span>input </span><span>id</span><span>=&quot;subCatagoryIdInput&quot;</span><span> name</span><span>=&quot;subCatagoryId&quot;</span><span> type</span><span>=&quot;text&quot;</span><span> style</span><span>=&quot;display: none;&quot;</span><span> required</span><span>=&quot;required&quot;</span> <span>&gt;</span>
                                                    <span><span>label</span><span>&gt;</span>
                                                <span><span>div</span><span>&gt;</span>
                                            <span><span>div</span><span>&gt;</span>

                                            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns submit-post&quot;</span><span>&gt;</span>
                                                <span>&lt;</span><span>label</span><span>&gt;</span><span>Tags:
                                                   </span>
                                                   <span>&lt;</span><span>input </span><span>name</span><span>=&quot;tagsinput&quot;</span><span> id</span><span>=&quot;tagsinputval&quot;</span><span> class</span><span>=&quot;tagsinput&quot;</span><span> data-role</span><span>=&quot;tagsinput&quot;</span><span>  placeholder</span><span>=&quot;&#x8F93;&#x5165;&#x540E;&#x56DE;&#x8F66;&quot;</span><span>/&gt;</span>
                                                <span><span>label</span><span>&gt;</span>
                                            <span><span>div</span><span>&gt;</span>
                                            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns submit-post&quot;</span><span>&gt;</span>
                                                <span>&lt;</span><span>button </span><span>class</span><span>=&quot;button expanded&quot;</span><span> type</span><span>=&quot;submit&quot;</span><span> name</span><span>=&quot;submit&quot;</span><span>&gt;</span>publish now<span><span>button</span><span>&gt;</span>
                                            <span><span>div</span><span>&gt;</span>
                                        <span><span>div</span><span>&gt;</span>
                                    <span><span>form</span><span>&gt;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>form

在页面添加一个进度条

  <div class="upload-video">
    <label for="imgUpload" class="button">Upload Coverlabel>
    <input onchange="coverFileChange(this)" required="required" type="file" id="imgUpload" class="show-for-sr">
      <span id="videoCoverSpan">No Cover chosenspan>
  div>
  <br>
  <a href="javascript:void(0);" onclick="uploadVOD()" style="background: #656fc3;border-bottom: 3px solid #424da9" class="button">
    Upload Video
  a>
  <div class="skillbar css">
  <span id="progressSpan" class="percent">70%span>
    <div id="progressDiv" class="filled" data-width="70%">div>
  div> 

JavaWeb_(视频网站)_五、视频模块1 视频上传

在javascript中处理视频上传后完成的进度

function uploadVOD(){
        //上传
        const uploader = tcVod.upload({
            videoFile:videoFile,
            coverFile:coverFile,
        })

        //事件的监听
        //视频上传完成时
        uploader.done().then(function (doneResult) {
            $("#videoUrl").val(doneResult.video.url);
             $("#coverImage").val(doneResult.cover.url);
             $("#videoFileId").val(doneResult.fileId);
             $("#progressSpan").text("100%");
             $("#progressDiv").width("100%");
             layer.msg("上传视频成功!!");
        })

        //视频上传进度
        uploader.on('video_progress', function(info) {
            var progress = info.percent * 100 + "%"
             //console.log(progress)
             $("#progressSpan").text(progress);
             $("#progressDiv").width(progress);
        })
    }

JavaWeb_(视频网站)_五、视频模块1 视频上传JavaWeb_(视频网站)_五、视频模块1 视频上传
<!doctype html>
<html class="no-js" lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">

<head><meta charset="utf-8"><meta http-equiv="x-ua-compatible" content="ie=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>BeTube videotitle><link rel="stylesheet" href="css/app.css"><link rel="stylesheet" href="css/theme.css"><link rel="stylesheet" href="css/font-awesome.min.css"><link href='https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700,800' rel='stylesheet' type='text/css'><link rel="stylesheet" type="text/css" href="layerslider/css/layerslider.css"><link rel="stylesheet" href="css/owl.carousel.min.css"><link rel="stylesheet" href="css/owl.theme.default.min.css"><link rel="stylesheet" href="css/jquery.kyco.easyshare.css"><link rel="stylesheet" href="css/responsive.css">

<link rel="stylesheet" href="js/bootstrap3.3.5.css"><link href="dist/summernote.css" rel="stylesheet" />

<link rel="stylesheet" type="text/css" href="css/css.css"/>

<script src="js/jquery.js">script><script src="js/bootstrap3.3.5.js">script><script src="dist/summernote.js">script>

<script src="dist/lang/summernote-zh-CN.js">script>

<script src="//unpkg.com/vod-js-sdk-v6">script>

<link rel="stylesheet" href="css/an-skill-bar.css">

<script >

<span>var</span><span> emojis;
</span><span>var</span><span> emojiUrls;
$.ajax({
    url:</span><span>&apos;</span><span>https://api.github.com/emojis</span><span>&apos;</span><span>,
    async:</span><span>false</span><span>
}).then(</span><span>function</span><span>(data){
    emojis </span><span>=</span><span> Object.keys(data);
    emojiUrls </span><span>=</span><span> data;
})

$(</span><span>function</span><span>() {
    $(</span><span>&apos;</span><span>.summernote</span><span>&apos;</span><span>).summernote({
        height : </span><span>200</span><span>,
        tabsize : </span><span>2</span><span>,
        lang : </span><span>&apos;</span><span>zh-CN</span><span>&apos;</span><span>,
        callbacks:
        {
            onImageUpload:</span><span>function</span><span>(files)
            {
                </span><span>var</span><span> formData </span><span>=</span> <span>new</span><span> FormData();
                formData.append(</span><span>&quot;</span><span>file</span><span>&quot;</span><span>,files[</span><span>0</span><span>]);
                formData.append(</span><span>&quot;</span><span>summernote</span><span>&quot;</span><span>,</span><span>&quot;</span><span>videoSummernote</span><span>&quot;</span><span>);
                $.ajax({

                    type:</span><span>&quot;</span><span>POST</span><span>&quot;</span><span>,
                    cache:</span><span>false</span><span>,
                    url:</span><span>&quot;</span><span>/uploadImageAJAX</span><span>&quot;</span><span>,
                    data:formData,
                    processData:</span><span>false</span><span>,
                    contentType:</span><span>false</span><span>,
                    dataType:</span><span>&quot;</span><span>json</span><span>&quot;</span><span>,
                    success:</span><span>function</span><span>(result)
                    {
                        $(</span><span>&quot;</span><span>.summernote</span><span>&quot;</span><span>).summernote(</span><span>&quot;</span><span>insertImage</span><span>&quot;</span><span>,result.summernoteImage,</span><span>&quot;</span><span>xxx</span><span>&quot;</span><span>);
                    },
                    error:</span><span>function</span><span>(result)
                    {
                        alert(</span><span>&quot;</span><span>&#x5931;&#x8D25;</span><span>&quot;</span><span>)
                    }

                })
            }
        },

        hint:{
            match: </span><span>/</span><span>:([\-+\w]+)$</span><span>/</span><span>,
            search:</span><span>function</span><span>(keyword,callback)
            {
                callback($.grep(emojis,</span><span>function</span><span>(item)
                {
                    </span><span>return</span><span> item.indexOf(keyword) </span><span>===</span> <span>0</span><span>;
                }))
            },
            template:</span><span>function</span><span>(item)
            {
                </span><span>var</span><span> content </span><span>=</span><span> emojiUrls[item];
                </span><span>return</span> <span>&apos;</span><span><img>:</span><span>&apos;</span> <span>+</span><span>item</span><span>+</span><span>&apos;</span><span>:</span><span>&apos;</span><span>;
            },
            content:</span><span>function</span><span>(item)
            {
                </span><span>var</span><span> url </span><span>=</span><span> emojiUrls[item];
                </span><span>if</span><span>(url)
                {
                    </span><span>return</span><span> $(</span><span>&quot;</span><span>&quot;</span><span>).attr(</span><span>&quot;</span><span>src</span><span>&quot;</span><span>,url).css(</span><span>&quot;</span><span>width</span><span>&quot;</span><span>,</span><span>20</span><span>)[</span><span>0</span><span>];
                }
                </span><span>return</span> <span>&apos;&apos;</span><span>;
            }
        }
    });
});

script>

head>
<body>
<div class="off-canvas-wrapper">
<div class="off-canvas-wrapper-inner" data-off-canvas-wrapper>

     <span>&lt;</span><span>div </span><span>th:replace</span><span>=&quot;~{fragments/header::header}&quot;</span><span>&gt;<span>div</span><span>&gt;</span>

        <span>&lt;</span><span>section </span><span>id</span><span>=&quot;breadcrumb&quot;</span><span>&gt;</span>
            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;row&quot;</span><span>&gt;</span>
                <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns&quot;</span><span>&gt;</span>
                    <span>&lt;</span><span>nav </span><span>aria-label</span><span>=&quot;You are here:&quot;</span><span> role</span><span>=&quot;navigation&quot;</span><span>&gt;</span>
                        <span>&lt;</span><span>ul </span><span>class</span><span>=&quot;breadcrumbs&quot;</span><span>&gt;</span>
                            <span>&lt;</span><span>li</span><span>&gt;&lt;</span><span>i </span><span>class</span><span>=&quot;fa fa-home&quot;</span><span>&gt;<span>i</span><span>&gt;&lt;</span><span>a </span><span>href</span><span>=&quot;#&quot;</span><span>&gt;</span>Home<span><span>a</span><span>&gt;<span>li</span><span>&gt;</span>
                            <span>&lt;</span><span>li</span><span>&gt;&lt;</span><span>a </span><span>href</span><span>=&quot;#&quot;</span><span>&gt;</span>profile<span><span>a</span><span>&gt;<span>li</span><span>&gt;</span>
                            <span>&lt;</span><span>li</span><span>&gt;</span>
                                <span>&lt;</span><span>span </span><span>class</span><span>=&quot;show-for-sr&quot;</span><span>&gt;</span>Current: <span><span>span</span><span>&gt;</span><span> submit post
                            </span><span><span>li</span><span>&gt;</span>
                        <span><span>ul</span><span>&gt;</span>
                    <span><span>nav</span><span>&gt;</span>
                <span><span>div</span><span>&gt;</span>
            <span><span>div</span><span>&gt;</span>
        <span><span>section</span><span>&gt;</span>

        <span>&lt;</span><span>section </span><span>class</span><span>=&quot;topProfile topProfile-inner&quot;</span><span> th:style</span><span>=&quot;&apos;background: url(/upload/&apos;+${user.coverImage}+&apos;) no-repeat;&apos;&quot;</span><span>&gt;</span>
            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;main-text&quot;</span><span>&gt;</span>
                <span>&lt;</span><span>div </span><span>class</span><span>=&quot;row&quot;</span><span>&gt;</span>
                    <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns&quot;</span><span>&gt;</span>
                        <span>&lt;</span><span>h3</span><span>&gt;</span>World&#x2019;s Biggest<span><span>h3</span><span>&gt;</span>
                        <span>&lt;</span><span>h1</span><span>&gt;</span>Powerfull Video Theme<span><span>h1</span><span>&gt;</span>
                    <span><span>div</span><span>&gt;</span>
                <span><span>div</span><span>&gt;</span>
            <span><span>div</span><span>&gt;</span>
            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;profile-stats&quot;</span><span>&gt;</span>
                <span>&lt;</span><span>div </span><span>th:replace</span><span>=&quot;~{fragments/user-bar::userBar}&quot;</span><span>&gt;<span>div</span><span>&gt;</span>
            <span><span>div</span><span>&gt;</span>
        <span><span>section</span><span>&gt;</span>
        <span>&lt;</span><span>div </span><span>class</span><span>=&quot;row&quot;</span><span>&gt;</span>

            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-4 columns&quot;</span><span>&gt;</span>

               <span>&lt;</span><span>div </span><span>th:replace</span><span>=&quot;~{fragments/profile::profile}&quot;</span><span>&gt;<span>div</span><span>&gt;</span>

            <span><span>div</span><span>&gt;</span>

            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-8 columns profile-inner&quot;</span><span>&gt;</span>

                <span>&lt;</span><span>section</span><span>&gt;</span>
                    <span>&lt;</span><span>div </span><span>class</span><span>=&quot;row secBg&quot;</span><span>&gt;</span>
                        <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns&quot;</span><span>&gt;</span>
                            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;heading submit-post&quot;</span><span>&gt;</span>
                                <span>&lt;</span><span>i </span><span>class</span><span>=&quot;fa fa-pencil-square-o&quot;</span><span>&gt;<span>i</span><span>&gt;</span>
                                <span>&lt;</span><span>h4</span><span>&gt;</span>Add new video post<span><span>h4</span><span>&gt;</span>
                            <span><span>div</span><span>&gt;</span>
                            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;row&quot;</span><span>&gt;</span>
                                <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns&quot;</span><span>&gt;</span>

                                    <span>&lt;</span><span>form </span><span>data-abide novalidate</span><span>&gt;</span>
                                        <span>&lt;</span><span>div </span><span>data-abide-error class</span><span>=&quot;alert callout submit-post&quot;</span><span> style</span><span>=&quot;display: none;&quot;</span><span>&gt;</span>
                                            <span>&lt;</span><span>p</span><span>&gt;&lt;</span><span>i </span><span>class</span><span>=&quot;fa fa-exclamation-triangle&quot;</span><span>&gt;<span>i</span><span>&gt;</span><span>
                                                There are some errors in your form.</span><span><span>p</span><span>&gt;</span>
                                        <span><span>div</span><span>&gt;</span>
                                        <span>&lt;</span><span>div </span><span>class</span><span>=&quot;row&quot;</span><span>&gt;</span>
                                            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns submit-post&quot;</span><span>&gt;</span>
                                                <span>&lt;</span><span>label</span><span>&gt;</span><span>Title
                                                    </span><span>&lt;</span><span>input </span><span>type</span><span>=&quot;text&quot;</span><span> placeholder</span><span>=&quot;enter you video title...&quot;</span><span> required</span><span>&gt;</span>
                                                    <span>&lt;</span><span>span </span><span>class</span><span>=&quot;form-error&quot;</span><span>&gt;</span><span>
                                                        Yo, you had better fill this out, it&apos;s required.

                                                    </span><span><span>span</span><span>&gt;</span>
                                                <span><span>label</span><span>&gt;</span>
                                            <span><span>div</span><span>&gt;</span>

                                               <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns submit-post&quot;</span><span>&gt;</span>
                                                    <span>&lt;</span><span>label</span><span>&gt;</span><span>Meta keywords:
                                                        </span><span>&lt;</span><span>textarea </span><span>placeholder</span><span>=&quot;enter meta keywords&quot;</span><span>&gt;<span>textarea</span><span>&gt;</span>
                                                    <span><span>label</span><span>&gt;</span>
                                                    <span>&lt;</span><span>p</span><span>&gt;</span>IF you want to put your custom meta Keywords then put here otherwise your post Keywords will be the default meta Keywords<span><span>p</span><span>&gt;</span>
                                                <span><span>div</span><span>&gt;</span>

                                            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns&quot;</span><span>&gt;</span>
                                            <span>&lt;</span><span>span </span><span>class</span><span>=&quot;submit-post&quot;</span><span>&gt;</span>
                                                <span>&lt;</span><span>label</span><span>&gt;</span><span>Description

                                                </span><span><span>label</span><span>&gt;</span>

                                            <span><span>span</span><span>&gt;</span>

                                                    <span>&lt;</span><span>div </span><span>class</span><span>=&quot;summernote&quot;</span><span>&gt;<span>div</span><span>&gt;</span>

                                            <span><span>div</span><span>&gt;</span>
                                            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns submit-post&quot;</span><span>&gt;</span>
                                                <span>&lt;</span><span>h6 </span><span>class</span><span>=&quot;borderBottom&quot;</span><span>&gt;</span>Choose Video File And Cover:<span><span>h6</span><span>&gt;</span>
                                            <span><span>div</span><span>&gt;</span>

                                            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns submit-post&quot;</span><span>&gt;</span>
                                                <span>&lt;</span><span>div </span><span>class</span><span>=&quot;upload-video&quot;</span><span>&gt;</span>
                                                    <span>&lt;</span><span>label </span><span>for</span><span>=&quot;videoUpload&quot;</span><span> class</span><span>=&quot;button&quot;</span><span>&gt;</span>Upload File<span><span>label</span><span>&gt;</span>
                                                    <span>&lt;</span><span>input </span><span>onchange</span><span>=&quot;videoFileChange(this)&quot;</span><span> required</span><span>=&quot;required&quot;</span><span> type</span><span>=&quot;file&quot;</span><span> id</span><span>=&quot;videoUpload&quot;</span><span> class</span><span>=&quot;show-for-sr&quot;</span><span>&gt;</span>
                                                    <span>&lt;</span><span>span </span><span>id</span><span>=&quot;videoFileSpan&quot;</span><span>&gt;</span>No file chosen<span><span>span</span><span>&gt;</span>
                                                <span><span>div</span><span>&gt;</span>
                                                <span>&lt;</span><span>br</span><span>&gt;</span>
                                                <span>&lt;</span><span>div </span><span>class</span><span>=&quot;upload-video&quot;</span><span>&gt;</span>
                                                    <span>&lt;</span><span>label </span><span>for</span><span>=&quot;imgUpload&quot;</span><span> class</span><span>=&quot;button&quot;</span><span>&gt;</span>Upload Cover<span><span>label</span><span>&gt;</span>
                                                    <span>&lt;</span><span>input </span><span>onchange</span><span>=&quot;coverFileChange(this)&quot;</span><span> required</span><span>=&quot;required&quot;</span><span> type</span><span>=&quot;file&quot;</span><span> id</span><span>=&quot;imgUpload&quot;</span><span> class</span><span>=&quot;show-for-sr&quot;</span><span>&gt;</span>
                                                    <span>&lt;</span><span>span </span><span>id</span><span>=&quot;videoCoverSpan&quot;</span><span>&gt;</span>No Cover chosen<span><span>span</span><span>&gt;</span>
                                                <span><span>div</span><span>&gt;</span>
                                                <span>&lt;</span><span>br</span><span>&gt;</span>
                                                   <span>&lt;</span><span>a </span><span>href</span><span>=&quot;javascript:void(0);&quot;</span><span> onclick</span><span>=&quot;uploadVOD()&quot;</span><span> style</span><span>=&quot;background: #656fc3;border-bottom: 3px solid #424da9&quot;</span><span> class</span><span>=&quot;button&quot;</span><span>&gt;</span><span>
                                                    Upload Video
                                                </span><span><span>a</span><span>&gt;</span>
                                                <span>&lt;</span><span>div </span><span>class</span><span>=&quot;skillbar css&quot;</span><span>&gt;</span>
                                                <span>&lt;</span><span>span </span><span>id</span><span>=&quot;progressSpan&quot;</span><span> class</span><span>=&quot;percent&quot;</span><span>&gt;</span>0%<span><span>span</span><span>&gt;</span>
                                                  <span>&lt;</span><span>div </span><span>id</span><span>=&quot;progressDiv&quot;</span><span> class</span><span>=&quot;filled&quot;</span><span> data-width</span><span>=&quot;0%&quot;</span><span>&gt;<span>div</span><span>&gt;</span>
                                                <span><span>div</span><span>&gt;</span>
                                            <span><span>div</span><span>&gt;</span>
                                           <span>&lt;</span><span>input </span><span>id</span><span>=&quot;videoUrl&quot;</span><span> name</span><span>=&quot;videoUrl&quot;</span><span> required</span><span>=&quot;required&quot;</span><span> hidden</span><span>=&quot;hidden&quot;</span><span>&gt;</span>
                                           <span>&lt;</span><span>input </span><span>id</span><span>=&quot;videoFileId&quot;</span><span> name</span><span>=&quot;videoFileId&quot;</span><span> required</span><span>=&quot;required&quot;</span><span> hidden</span><span>=&quot;hidden&quot;</span><span>&gt;</span>
                                           <span>&lt;</span><span>input </span><span>id</span><span>=&quot;coverImage&quot;</span><span>name</span><span>=&quot;coverImage&quot;</span><span> required</span><span>=&quot;required&quot;</span><span> hidden</span><span>=&quot;hidden&quot;</span><span>&gt;</span>
                                            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns&quot;</span><span>&gt;</span>

                                                <span>&lt;</span><span>div </span><span>class</span><span>=&quot;post-category submit-post&quot;</span><span>&gt;</span>
                                                    <span>&lt;</span><span>label</span><span>&gt;</span><span>Choose Video Category:
                                                        </span><span>&lt;</span><span>select</span><span>&gt;</span>
                                                            <span>&lt;</span><span>option </span><span>th:each</span><span>=&quot;catagory:${catagoryList}&quot;</span><span>  th:onclick</span><span>=&quot;catagoryClick([[${#setUtils.getSubCatagorys(catagory.subCatagorys)}]],[[${catagory.id}]])&quot;</span><span>  th:text</span><span>=&quot;${catagory.catagory}&quot;</span><span>&gt;</span>one<span><span>option</span><span>&gt;</span>
                                                        <span><span>select</span><span>&gt;</span>
                                                        <span>&lt;</span><span>input </span><span>id</span><span>=&quot;catagoryIdInput&quot;</span><span> name</span><span>=&quot;catagoryId&quot;</span><span> type</span><span>=&quot;text&quot;</span><span> style</span><span>=&quot;display: none;&quot;</span><span> required</span><span>=&quot;required&quot;</span><span>&gt;</span>
                                                    <span><span>label</span><span>&gt;</span>
                                                <span><span>div</span><span>&gt;</span>

                                                <span>&lt;</span><span>div </span><span>class</span><span>=&quot;post-category submit-post&quot;</span><span>&gt;</span>
                                                    <span>&lt;</span><span>label</span><span>&gt;</span><span>Choose Video Sub-Category:
                                                        </span><span>&lt;</span><span>select </span><span>id</span><span>=&quot;subCatagoryId&quot;</span><span>&gt;</span>
                                                            <span>&lt;</span><span>option </span><span>value</span><span>=&quot;&quot;</span><span>&gt;</span>one<span><span>option</span><span>&gt;</span>
                                                            <span>&lt;</span><span>option </span><span>value</span><span>=&quot;&quot;</span><span>&gt;</span>two<span><span>option</span><span>&gt;</span>
                                                            <span>&lt;</span><span>option </span><span>value</span><span>=&quot;&quot;</span><span>&gt;</span>three<span><span>option</span><span>&gt;</span>
                                                        <span><span>select</span><span>&gt;</span>
                                                        <span>&lt;</span><span>input </span><span>id</span><span>=&quot;subCatagoryIdInput&quot;</span><span> name</span><span>=&quot;subCatagoryId&quot;</span><span> type</span><span>=&quot;text&quot;</span><span> style</span><span>=&quot;display: none;&quot;</span><span> required</span><span>=&quot;required&quot;</span> <span>&gt;</span>
                                                    <span><span>label</span><span>&gt;</span>
                                                <span><span>div</span><span>&gt;</span>
                                            <span><span>div</span><span>&gt;</span>

                                            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns submit-post&quot;</span><span>&gt;</span>
                                                <span>&lt;</span><span>label</span><span>&gt;</span><span>Tags:
                                                   </span>
                                                   <span>&lt;</span><span>input </span><span>name</span><span>=&quot;tagsinput&quot;</span><span> id</span><span>=&quot;tagsinputval&quot;</span><span> class</span><span>=&quot;tagsinput&quot;</span><span> data-role</span><span>=&quot;tagsinput&quot;</span><span>  placeholder</span><span>=&quot;&#x8F93;&#x5165;&#x540E;&#x56DE;&#x8F66;&quot;</span><span>/&gt;</span>
                                                <span><span>label</span><span>&gt;</span>
                                            <span><span>div</span><span>&gt;</span>
                                            <span>&lt;</span><span>div </span><span>class</span><span>=&quot;large-12 columns submit-post&quot;</span><span>&gt;</span>
                                                <span>&lt;</span><span>button </span><span>class</span><span>=&quot;button expanded&quot;</span><span> type</span><span>=&quot;submit&quot;</span><span> name</span><span>=&quot;submit&quot;</span><span>&gt;</span>publish now<span><span>button</span><span>&gt;</span>
                                            <span><span>div</span><span>&gt;</span>
                                        <span><span>div</span><span>&gt;</span>
                                    <span><span>form</span><span>&gt;</span>

                                <span><span>div</span><span>&gt;</span>
                            <span><span>div</span><span>&gt;</span>
                        <span><span>div</span><span>&gt;</span>
                    <span><span>div</span><span>&gt;</span>
                <span><span>section</span><span>&gt;</span>
            <span><span>div</span><span>&gt;</span>
        <span><span>div</span><span>&gt;</span>

        <span>&lt;</span><span>div </span><span>th:replace</span><span>=&quot;~{fragments/footer::footer}&quot;</span><span>&gt;<span>div</span><span>&gt;</span>

<span><span>div</span><span>&gt;</span>

div>

<script src="layer/layer.js">script>

<script src="js/an-skill-bar.js">script>
<script src="js/main.js">script>

<script src="js/tagsinput.js" type="text/javascript" charset="utf-8">script>
<script type="text/javascript" th:inline="javascript">

<span>//</span><span>&#x89C6;&#x9891;&#x4E0A;&#x4F20;</span>
<span>function</span><span> getSignature(){
    </span><span>var</span><span> sign;
      alert(</span><span>&quot;</span><span>Gary getSign</span><span>&quot;</span><span>);
      $.ajax({
          url:[[@{</span><span>~</span><span>/</span><span>videoSign}]],</span>

async:false,
type:
"POST",
success:
function(result)
{
sign
= result;
}
})
return sign;
}

</span><span>//</span><span>&#x83B7;&#x5F97;&#x7B7E;&#x540D;</span>

const tcVod = new TcVod.default({
getSignature:getSignature
})

</span><span>var</span><span> videoFile;
</span><span>var</span><span> coverFile;

</span><span>function</span><span> videoFileChange(e)
{
    </span><span>//</span><span>&#x8D4B;&#x503C;Vodie</span>

videoFile = e.files[0];
$(
"#videoFileSpan").text(e.files[0].name);
}

</span><span>function</span><span> coverFileChange(e)
{
    </span><span>//</span><span>&#x8D4B;&#x503C;Cover</span>

coverFile = e.files[0];
$(
"#videoCoverSpan").text(e.files[0].name);
}

</span><span>function</span><span> uploadVOD(){
    </span><span>//</span><span>&#x4E0A;&#x4F20;</span>

const uploader = tcVod.upload({
videoFile:videoFile,
coverFile:coverFile,
})

    </span><span>//</span><span>&#x4E8B;&#x4EF6;&#x7684;&#x76D1;&#x542C;</span>
    <span>//</span><span>&#x89C6;&#x9891;&#x4E0A;&#x4F20;&#x5B8C;&#x6210;&#x65F6;</span>

uploader.done().then(function (doneResult) {
$(
"#videoUrl").val(doneResult.video.url);
$(
"#coverImage").val(doneResult.cover.url);
$(
"#videoFileId").val(doneResult.fileId);
$(
"#progressSpan").text("100%");
$(
"#progressDiv").width("100%");
layer.msg(
"上传视频成功!!");
})

    </span><span>//</span><span>&#x89C6;&#x9891;&#x4E0A;&#x4F20;&#x8FDB;&#x5EA6;</span>

uploader.on('video_progress', function(info) {
var progress = info.percent * 100 + "%"
//console.log(progress)
$("#progressSpan").text(progress);
$(
"#progressDiv").width(progress);
})
}

</span><span>function</span><span> catagoryClick(str,id)
{
    </span><span>//</span><span>alert(str)</span>
    <span>//</span><span>&#x5220;&#x9664;&#x4E8C;&#x7EA7;&#x9009;&#x9879;&#x7684;&#x8282;&#x70B9;</span>
    <span>//</span><span>&#x83B7;&#x5F97;&#x7236;&#x5143;&#x7D20;</span>
    <span>var</span><span> subCatagoryId </span><span>=</span><span> document.getElementById(</span><span>&quot;</span><span>subCatagoryId</span><span>&quot;</span><span>)
    </span><span>//</span><span>&#x83B7;&#x5F97;&#x7236;&#x5143;&#x7D20;&#x4E0B;&#x7684;&#x6240;&#x6709;&#x5B50;&#x5143;&#x7D20;</span>
    <span>var</span><span> childs </span><span>=</span><span> subCatagoryId.childNodes;
    </span><span>//</span><span>&#x5220;&#x9664;&#xFF0C;&#x8282;&#x70B9;&#x7684;&#x7D22;&#x5F15;&#x4F1A;&#x52A8;&#x6001;&#x6539;&#x53D8;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x4EEC;&#x4ECE;&#x540E;&#x5F80;&#x524D;&#x5220;&#x9664;</span>
    <span>for</span><span>(</span><span>var</span><span> i </span><span>=</span><span> childs.length </span><span>-</span> <span>1</span><span>; i</span><span>&gt;=</span><span>0</span><span>; i</span><span>--</span><span>)
    {
        subCatagoryId.removeChild(childs[i]);
    }
    </span><span>//</span><span>&#x5207;&#x5272;str</span>
    <span>var</span><span> subCatagory </span><span>=</span> <span>new</span><span> Array();
    subCatagory </span><span>=</span><span> str.split(</span><span>&quot;</span><span>|</span><span>&quot;</span><span>);
        </span><span>//</span><span>1,MAD</span>
    <span>for</span><span>(</span><span>var</span><span> i </span><span>=</span> <span>0</span><span>;i</span><span>&lt;</span><span>subCatagory.length;i</span><span>++</span><span>)
    {
        </span><span>var</span><span> idList </span><span>=</span> <span>new</span><span> Array();
        idList </span><span>=</span><span> subCatagory[i].split(</span><span>&quot;</span><span>,</span><span>&quot;</span><span>)
        </span><span>//</span><span>&#x521B;&#x5EFA;&#x8282;&#x70B9;</span>
        <span>var</span><span> option </span><span>=</span><span> document.createElement(</span><span>&quot;</span><span>option</span><span>&quot;</span><span>);
        </span><span>//</span><span>&#x8D4B;&#x503C;</span>

option.innerHTML = idList[1];
option.setAttribute(
"onclick","subCatagoryClick("+idList[0]+")")
//添加节点
subCatagoryId.appendChild(option);
}
$(
"#catagoryIdInput").val(id);
}

</span><span>function</span><span> subCatagoryClick(id)
{
    $(</span><span>&quot;</span><span>#subCatagoryIdInput</span><span>&quot;</span><span>).val(id);
}

</span><span><span>script</span><span>&gt;</span>

<span>&lt;</span><span>script </span><span>src</span><span>=&quot;bower_components/jquery/dist/jquery.js&quot;</span><span>&gt;<span>script</span><span>&gt;</span>
<span>&lt;</span><span>script </span><span>src</span><span>=&quot;bower_components/what-input/what-input.js&quot;</span><span>&gt;<span>script</span><span>&gt;</span>
<span>&lt;</span><span>script </span><span>src</span><span>=&quot;bower_components/foundation-sites/dist/foundation.js&quot;</span><span>&gt;<span>script</span><span>&gt;</span>
<span>&lt;</span><span>script </span><span>src</span><span>=&quot;js/jquery.showmore.src.js&quot;</span><span> type</span><span>=&quot;text/javascript&quot;</span><span>&gt;<span>script</span><span>&gt;</span>
<span>&lt;</span><span>script </span><span>src</span><span>=&quot;js/app.js&quot;</span><span>&gt;<span>script</span><span>&gt;</span>
<span>&lt;</span><span>script </span><span>src</span><span>=&quot;layerslider/js/greensock.js&quot;</span><span> type</span><span>=&quot;text/javascript&quot;</span><span>&gt;<span>script</span><span>&gt;</span>

<span>&lt;</span><span>script </span><span>src</span><span>=&quot;layerslider/js/layerslider.transitions.js&quot;</span><span> type</span><span>=&quot;text/javascript&quot;</span><span>&gt;<span>script</span><span>&gt;</span>
<span>&lt;</span><span>script </span><span>src</span><span>=&quot;layerslider/js/layerslider.kreaturamedia.jquery.js&quot;</span><span> type</span><span>=&quot;text/javascript&quot;</span><span>&gt;<span>script</span><span>&gt;</span>
<span>&lt;</span><span>script </span><span>src</span><span>=&quot;js/owl.carousel.min.js&quot;</span><span>&gt;<span>script</span><span>&gt;</span>
<span>&lt;</span><span>script </span><span>src</span><span>=&quot;js/inewsticker.js&quot;</span><span> type</span><span>=&quot;text/javascript&quot;</span><span>&gt;<span>script</span><span>&gt;</span>
<span>&lt;</span><span>script </span><span>src</span><span>=&quot;js/jquery.kyco.easyshare.js&quot;</span><span> type</span><span>=&quot;text/javascript&quot;</span><span>&gt;<span>script</span><span>&gt;</span>

body>
html>

submit-post-video.html

接下来创建Video实体,封装基本字段和复杂字段

分析复杂字段

JavaWeb_(视频网站)_五、视频模块1 视频上传JavaWeb_(视频网站)_五、视频模块1 视频上传
package com.Gary.betobe.domain;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;

@Entity
public class Video {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    @Lob
    private String content;
    private String keyword;

    private String createTime;
    private Integer viewNum;
    private Integer seconds;

    private String videoFileId;
    private String videoUrl;
    private String coverImage;

    //复杂字段
    //视频属于的分类
    @ManyToOne(targetEntity = Catagory.class)
    @JoinColumn(name = "catagory_id")
    private Catagory catagory;

    //视频属于的小分类
    @ManyToOne(targetEntity = SubCatagory.class)
    @JoinColumn(name = "sub_catagory_id")
    private SubCatagory subCatagory;

    //发布视频的用户
    @ManyToOne(targetEntity = User.class)
    @JoinColumn(name = "user_id")
    private User user;

    //视频中的标签
    @ManyToMany
    @JoinTable(
            name = "video_tag",
            joinColumns = @JoinColumn(name = "video_id"),
            inverseJoinColumns = @JoinColumn(name="tag_id")
            )
    private Set videoTags = new HashSet();

    //JPA标准
    protected Video()
    {

    }

    public Video(Long id, String title, String content, String keyword, String createTime, Integer viewNum,
            Integer seconds, String videoFileId, String videoUrl, String coverImage, Catagory catagory,
            SubCatagory subCatagory, User user, Set videoTags) {
        super();
        this.id = id;
        this.title = title;
        this.content = content;
        this.keyword = keyword;
        this.createTime = createTime;
        this.viewNum = viewNum;
        this.seconds = seconds;
        this.videoFileId = videoFileId;
        this.videoUrl = videoUrl;
        this.coverImage = coverImage;
        this.catagory = catagory;
        this.subCatagory = subCatagory;
        this.user = user;
        this.videoTags = videoTags;
    }

    public String getVideoUrl() {
        return videoUrl;
    }

    public void setVideoUrl(String videoUrl) {
        this.videoUrl = videoUrl;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getKeyword() {
        return keyword;
    }

    public void setKeyword(String keyword) {
        this.keyword = keyword;
    }

    public String getCreateTime() {
        return createTime;
    }

    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }

    public Integer getViewNum() {
        return viewNum;
    }

    public void setViewNum(Integer viewNum) {
        this.viewNum = viewNum;
    }

    public Integer getSeconds() {
        return seconds;
    }

    public void setSeconds(Integer seconds) {
        this.seconds = seconds;
    }

    public String getVideoFileId() {
        return videoFileId;
    }

    public void setVideoFileId(String videoFileId) {
        this.videoFileId = videoFileId;
    }

    public String getCoverImage() {
        return coverImage;
    }

    public void setCoverImage(String coverImage) {
        this.coverImage = coverImage;
    }

    public Catagory getCatagory() {
        return catagory;
    }

    public void setCatagory(Catagory catagory) {
        this.catagory = catagory;
    }

    public SubCatagory getSubCatagory() {
        return subCatagory;
    }

    public void setSubCatagory(SubCatagory subCatagory) {
        this.subCatagory = subCatagory;
    }

    public Set getVideoTags() {
        return videoTags;
    }

    public void setVideoTags(Set videoTags) {
        this.videoTags = videoTags;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

}

Video.java

JavaWeb_(视频网站)_五、视频模块1 视频上传JavaWeb_(视频网站)_五、视频模块1 视频上传
package com.Gary.betobe.domain;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;

//大分类
@Entity
public class Catagory {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String catagory;

    //大分类下的所有博客
    @OneToMany(targetEntity = Blog.class)
    @JoinColumn(name="catagory_id")
    private Set blogs = new HashSet();

    //该大分类下的所有小分类
    @OneToMany(targetEntity = SubCatagory.class)
    @JoinColumn(name="catagory_id")
    private Set subCatagorys = new HashSet();

    //该标签下的所有视频
    @OneToMany(targetEntity = Video.class)
    @JoinColumn(name="catagory_id")
    private Set videos = new HashSet<>();

    protected Catagory()
    {

    }

    public Catagory(Long id, String catagory, Set blogs, Set subCatagorys, Set videos) {
        super();
        this.id = id;
        this.catagory = catagory;
        this.blogs = blogs;
        this.subCatagorys = subCatagorys;
        this.videos = videos;
    }

    //@Override
    //public String toString() {
    //    return "Catagory [id=" + id + ", catagory=" + catagory + ", blogs=" + blogs + ", subCatagorys=" + subCatagorys
    //            + "]";
    //}

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getCatagory() {
        return catagory;
    }

    public void setCatagory(String catagory) {
        this.catagory = catagory;
    }

    public Set getBlogs() {
        return blogs;
    }

    public void setBlogs(Set blogs) {
        this.blogs = blogs;
    }

    public Set getSubCatagorys() {
        return subCatagorys;
    }

    public void setSubCatagorys(Set subCatagorys) {
        this.subCatagorys = subCatagorys;
    }

    public Set getVideos() {
        return videos;
    }

    public void setVideos(Set videos) {
        this.videos = videos;
    }

}

Catagory.java

JavaWeb_(视频网站)_五、视频模块1 视频上传JavaWeb_(视频网站)_五、视频模块1 视频上传
package com.Gary.betobe.domain;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

//小分类
@Entity
public class SubCatagory {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String subCatagory;

    //该小分类下的所有博客
    @OneToMany(targetEntity = Blog.class)
    @JoinColumn(name="sub_catagory_id")
    private Set blogs = new HashSet();

    //这个小分类属于哪一个大分类
    @ManyToOne(targetEntity = Catagory.class)
    @JoinColumn(name="catagory_id")
    private Catagory catagory;

    @OneToMany(targetEntity = Video.class)
    @JoinColumn(name = "sub_catagory_id")
    private Set videos = new HashSet<>();

    //小分类与标签,多对多
    @ManyToMany
    @JoinTable(
            name="sub_catagory_tag",
            joinColumns = @JoinColumn(name = "sub_catagory_id"),
            inverseJoinColumns = @JoinColumn(name="tag_id")
            )
    private Set tags = new HashSet();

    protected SubCatagory()
    {

    }

    public SubCatagory(Long id, String subCatagory, Set blogs, Catagory catagory, Set videos,
            Set tags) {
        super();
        this.id = id;
        this.subCatagory = subCatagory;
        this.blogs = blogs;
        this.catagory = catagory;
        this.videos = videos;
        this.tags = tags;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getSubCatagory() {
        return subCatagory;
    }

    public void setSubCatagory(String subCatagory) {
        this.subCatagory = subCatagory;
    }

    public Set getBlogs() {
        return blogs;
    }

    public void setBlogs(Set blogs) {
        this.blogs = blogs;
    }

    public Catagory getCatagory() {
        return catagory;
    }

    public void setCatagory(Catagory catagory) {
        this.catagory = catagory;
    }

    public Set getTags() {
        return tags;
    }

    public void setTags(Set tags) {
        this.tags = tags;
    }

    public Set getVideos() {
        return videos;
    }

    public void setVideos(Set videos) {
        this.videos = videos;
    }

}

SubCatagory.java

JavaWeb_(视频网站)_五、视频模块1 视频上传JavaWeb_(视频网站)_五、视频模块1 视频上传
package com.Gary.betobe.domain;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;

//标签
@Entity
public class Tag {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String tag;

    //该标签下的所有博客
    @ManyToMany(mappedBy = "blogTags")
    private Set tagBlogs = new HashSet();

    //该标签下的所有小分类
    @ManyToMany(mappedBy = "tags")
    private Set subCatagoryTage = new HashSet();

    @ManyToMany(mappedBy = "videoTags")
    private Set tagVideos = new HashSet<>();

    protected Tag()
    {

    }

    public Tag(Long id, String tag, Set tagBlogs, Set subCatagoryTage, Set tagVideos) {
        super();
        this.id = id;
        this.tag = tag;
        this.tagBlogs = tagBlogs;
        this.subCatagoryTage = subCatagoryTage;
        this.tagVideos = tagVideos;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTag() {
        return tag;
    }

    public void setTag(String tag) {
        this.tag = tag;
    }

    public Set getTagBlogs() {
        return tagBlogs;
    }

    public void setTagBlogs(Set tagBlogs) {
        this.tagBlogs = tagBlogs;
    }

    public Set getSubCatagoryTage() {
        return subCatagoryTage;
    }

    public void setSubCatagoryTage(Set subCatagoryTage) {
        this.subCatagoryTage = subCatagoryTage;
    }

    public Set getTagVideos() {
        return tagVideos;
    }

    public void setTagVideos(Set tagVideos) {
        this.tagVideos = tagVideos;
    }

}

Tag.java

JavaWeb_(视频网站)_五、视频模块1 视频上传JavaWeb_(视频网站)_五、视频模块1 视频上传
package com.Gary.betobe.domain;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;
    private String password;
    private String email;

    private String firstName;
    private String lastName;

    private String displayName;
    //个人首页
    private String webUrl;

    private String phone;
    //个人描述
    @Lob
    //长文本 ->lob对应mysql的数据类型  longtext
    private String description;
    //social Link
    private String qqLink;
    private String weixinLink;

    //封面头像
    private String coverImage;
    //头像
    private String headImage;
    //创建时间
    private String createTime;

    //用户发的所有评论
    @OneToMany(targetEntity = Comment.class)
    @JoinColumn(name = "user_id")
    private Set comments = new HashSet();

    //用户发的博客
    @OneToMany(targetEntity = Blog.class)
    @JoinColumn(name = "user_id")
    private Set blogs = new HashSet();

    //用户发的视频
    @OneToMany(targetEntity = Video.class)
    @JoinColumn(name="user_id")
    private Set videos = new HashSet();

    //我关注了哪些用户
    //该用户关注了哪些用户  在保存的时候,会级联保存所有临时对象
    @ManyToMany(cascade = CascadeType.PERSIST)
    @JoinTable(
            name="user_follow",
            joinColumns = @JoinColumn(name = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "follow_id")
            )
    private Set follows = new HashSet();

    //用户,同意了哪些评论
    @ManyToMany
    @JoinTable(
            name="agree_user_comment",
            joinColumns = @JoinColumn(name="user_id"),
            inverseJoinColumns = @JoinColumn(name = "comment_id")
            )
    private Set agreeComments = new HashSet();

    //用户,不同意了哪些评论
    @ManyToMany
    @JoinTable(
            name="disagree_user_comment",
            joinColumns = @JoinColumn(name="user_id"),
            inverseJoinColumns = @JoinColumn(name="comment_id")
            )
    private Set disagreeComments = new HashSet();

    //用户同意了哪些回复
    @ManyToMany
    @JoinTable(
            name="agree_user_reply",
            joinColumns = @JoinColumn(name="user_id"),
            inverseJoinColumns = @JoinColumn(name="reply_id")
            )
    private Set agreeReplys = new HashSet();

    //用户不同意了哪些回复
    @ManyToMany
    @JoinTable(
            name="disagree_user_reply",
            joinColumns=@JoinColumn(name="user_id"),
            inverseJoinColumns = @JoinColumn(name="reply_id")
            )
    private Set disagreeReplys = new HashSet<>();

    //JPA的标准
    protected User()
    {

    }

    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", password=" + password + ", email=" + email
                + ", firstName=" + firstName + ", lastName=" + lastName + ", displayName=" + displayName + ", webUrl="
                + webUrl + ", phone=" + phone + ", description=" + description + ", qqLink=" + qqLink + ", weixinLink="
                + weixinLink + ", coverImage=" + coverImage + ", headImage=" + headImage + ", createTime=" + createTime
                + ", comments=" + comments + ", blogs=" + blogs + ", videos=" + videos + ", follows=" + follows
                + ", agreeComments=" + agreeComments + ", disagreeComments=" + disagreeComments + ", agreeReplys="
                + agreeReplys + ", disagreeReplys=" + disagreeReplys + "]";
    }

    public User(Long id, String username, String password, String email, String firstName, String lastName,
            String displayName, String webUrl, String phone, String description, String qqLink, String weixinLink,
            String coverImage, String headImage, String createTime, Set comments, Set blogs,
            Set videos, Set follows, Set agreeComments, Set disagreeComments,
            Set agreeReplys, Set disagreeReplys) {
        super();
        this.id = id;
        this.username = username;
        this.password = password;
        this.email = email;
        this.firstName = firstName;
        this.lastName = lastName;
        this.displayName = displayName;
        this.webUrl = webUrl;
        this.phone = phone;
        this.description = description;
        this.qqLink = qqLink;
        this.weixinLink = weixinLink;
        this.coverImage = coverImage;
        this.headImage = headImage;
        this.createTime = createTime;
        this.comments = comments;
        this.blogs = blogs;
        this.videos = videos;
        this.follows = follows;
        this.agreeComments = agreeComments;
        this.disagreeComments = disagreeComments;
        this.agreeReplys = agreeReplys;
        this.disagreeReplys = disagreeReplys;
    }

    public Set getBlogs() {
        return blogs;
    }

    public void setBlogs(Set blogs) {
        this.blogs = blogs;
    }

    public Set getAgreeReplys() {
        return agreeReplys;
    }

    public void setAgreeReplys(Set agreeReplys) {
        this.agreeReplys = agreeReplys;
    }

    public Set getDisagreeReplys() {
        return disagreeReplys;
    }

    public void setDisagreeReplys(Set disagreeReplys) {
        this.disagreeReplys = disagreeReplys;
    }

    public Set getComments() {
        return comments;
    }

    public void setComments(Set comments) {
        this.comments = comments;
    }

    public Set getAgreeComments() {
        return agreeComments;
    }

    public void setAgreeComments(Set agreeComments) {
        this.agreeComments = agreeComments;
    }

    public Set getDisagreeComments() {
        return disagreeComments;
    }

    public void setDisagreeComments(Set disagreeComments) {
        this.disagreeComments = disagreeComments;
    }

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getWebUrl() {
        return webUrl;
    }
    public void setWebUrl(String webUrl) {
        this.webUrl = webUrl;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getQqLink() {
        return qqLink;
    }
    public void setQqLink(String qqLink) {
        this.qqLink = qqLink;
    }
    public String getWeixinLink() {
        return weixinLink;
    }
    public void setWeixinLink(String weixinLink) {
        this.weixinLink = weixinLink;
    }
    public String getCoverImage() {
        return coverImage;
    }
    public void setCoverImage(String coverImage) {
        this.coverImage = coverImage;
    }
    public String getHeadImage() {
        return headImage;
    }
    public void setHeadImage(String headImage) {
        this.headImage = headImage;
    }
    public String getCreateTime() {
        return createTime;
    }
    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }

    public Set getFollows() {
        return follows;
    }

    public void setFollows(Set follows) {
        this.follows = follows;
    }

    public String getDisplayName() {
        return displayName;
    }

    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }

    public Set getVideos() {
        return videos;
    }

    public void setVideos(Set videos) {
        this.videos = videos;
    }

}

User.java

JavaWeb_(视频网站)_五、视频模块1 视频上传

VideoController.class接收封装视频请求@RequestMapping("saveVideo")

@RequestMapping("saveVideo")
    public String saveVideo(Video video,String tagsinput,String catagoryId,String subCatagoryId)
    {
        System.out.println("video" + video);
        System.out.println("tagsinput" + tagsinput);
        System.out.println("catagoryId" + catagoryId);
        System.out.println("subCatagoryId" + subCatagoryId);

        Catagory catagory = catagoryService.findCatagoryById(catagoryId);
        video.setCatagory(catagory);
        //封装小分类
        SubCatagory subCatagory = subCatagoryService.findSubCatagoryById(subCatagoryId);
        //封装创建事件
        Date date = new Date(System.currentTimeMillis());
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm");
        String createTime = format.format(date);
        video.setCreateTime(createTime);
        //
        tagsinput = tagsinput.toUpperCase();
        //封装标签
        String[] tags = tagsinput.split(",");
        Set videoTags = new HashSet<>();
        for(int i=0;i)
        {
            Tag tag = null;
            //如果标签不存在
            if(tagService.findTagByTag(tags[i])==null)
            {
                tag = new Tag(null,tags[i],new HashSet<>(),new HashSet<>(),new HashSet<>());
                //保存该标签
                tag = tagService.saveTag(tag);
            }
            //如果标签存在
            else
            {
                tag = tagService.findTagByTag(tags[i]);
            }
            //维护video与tag的关系
            videoTags.add(tag);
            //维护subCatagory与tag之间的多对多关系
            subCatagory.getTags().add(tag);
            tag.getSubCatagoryTage().add(subCatagory);
        }

        //维护video与小标签的关系
        video.setSubCatagory(subCatagory);
        //维护video与tag的关系
        video.setVideoTags(videoTags);
        //封装发布video的用户
        User user =  (User) session.getAttribute("user");
        video.setUser(user);
        //封装浏览数目
        video.setViewNum(0L);
        //保存video
        videoService.saveVideo(video);

        return "redirect:/index";
    }

提交视频后,会将视频上传到数据库保存起来

JavaWeb_(视频网站)_五、视频模块1 视频上传

Original: https://www.cnblogs.com/1138720556Gary/p/12128681.html
Author: Cynical丶Gary
Title: JavaWeb_(视频网站)_五、视频模块1 视频上传

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/537879/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球