短视频社交|电影点播平台Springboot+vue+ElementUI前后端分离

简介: 短视频社交|电影点播平台Springboot+vue+ElementUI前后端分离

项目编号:BS-PT-071

一,项目简介


本项目基于Springboot+vue开发实现了一个电影点播和短视频分享平台,名为爱奇艺影视平台系统。系统开发采用前后端分离的模式开发实现,分为前端系统用户功能模块和后台系统用户功能模块。

前端用户的主要功能:


1.注册登陆


2.全文检索


3.视频播放


4.点赞收藏


5.弹幕播放


6.评论影视


7.关注作者


8.视频上传


9.个人中心管理等等


后台用户的主要功能:


1.用户管理


2.视频管理


3.视频审核


4.播放量统计图形报表


5.分类管理等等

二,环境介绍


语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发技术:Springboot+Mybatis

前端开发技术:vue+ElementUI

三,系统展示


前端系统展示

image.png

注册登陆

image.png

播放视频

image.png

个人中心

image.png

消息中心

image.png

视频中心

image.png

视频上传

image.png

后台管理模块

image.png

用户管理

image.png

播放量统计

image.png

视频管理

image.png

视频审核

image.png

视频分类管理

image.png

四,核心代码展示


package com.hu.video.controller;
import com.hu.video.service.IAdminEChartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
/**
 * @author znz
 */
@Controller
@RequestMapping("admin")
public class AdminEChartController {
    @Autowired
    private IAdminEChartService adminEChartService;
    @RequestMapping("getFilmData")
    @ResponseBody
    public List<String> getFilmData() {
        return adminEChartService.getFilmData();
    }
    @RequestMapping("getData")
    @ResponseBody
    public List<Integer> getData() {
        return adminEChartService.getData();
    }
}
package com.hu.video.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hu.video.entity.Admin;
import com.hu.video.entity.TUser;
import com.hu.video.entity.dto.UserStateDTO;
import com.hu.video.service.IAdminUserService;
import com.hu.video.service.IUserService;
import com.hu.video.util.MsgResponse;
import com.hu.video.util.VueUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.util.List;
@RequestMapping("admin")
@RestController
public class AdminUserController {
    @Autowired
    private IAdminUserService adminUserService;
    @Autowired
    private IUserService userService;
    @RequestMapping("login")
    public MsgResponse login(@RequestBody Admin admin, HttpSession session) {
        Admin admin1 = adminUserService.login(admin);
        if (admin1 == null) {
            return MsgResponse.fail("密码错误");
        }
        session.setAttribute("admin", admin);
        return MsgResponse.success("登录成功", null);
    }
    @RequestMapping("list")
    public List<UserStateDTO> userList() {
        return adminUserService.userList();
    }
    @RequestMapping("getUserById")
    public UserStateDTO getUserById(Long id) {
        return adminUserService.getUserById(id);
    }
    @RequestMapping(value = "editUser", method = RequestMethod.POST)
    public void editUser(@RequestBody TUser tUser) {
        adminUserService.editUser(tUser);
    }
    @RequestMapping("deleteUser/{id}")
    public String deleteUser(@PathVariable Long id) {
        adminUserService.deleteUser(id);
        return "success";
    }
    @RequestMapping(value = "addUser", method = RequestMethod.POST)
    public String addUser(@RequestBody TUser tUser) {
        adminUserService.addUser(tUser);
        return "success";
    }
    /*---------上传头像--------*/
    @ResponseBody
    @RequestMapping("upload")
    public VueUtil upload(@RequestParam MultipartFile avatar, Long userId) {
        String workplace = System.getProperty("user.dir");
        //获取上传时候的文件名
        String suffix = avatar.getOriginalFilename().substring(avatar.getOriginalFilename().indexOf("."));
        String fileName = "icon" + String.valueOf(userId) + suffix;
        File newFile = new File(workplace + "/src/main/resources/static/uimages/" + fileName);
        userService.updateUserIcon("/user/getIcon/" + fileName,userId);
        try {
            avatar.transferTo(newFile);
            System.out.println("success");
            Object res = "http://localhost:8081/user/getIcon/icon" + userId + suffix;
            System.out.println(res);
            return VueUtil.success("上传成功",res);
        } catch (IOException e) {
            e.printStackTrace();
            return VueUtil.fail("上传失败");
        }
    }
    @RequestMapping(value = "searchUser", method = RequestMethod.GET)
    public PageInfo<UserStateDTO> searchUser(int pageNum, int pageSize,String username) {
        //调用一个pageHelper的一个静态方法
        PageHelper.startPage(pageNum, pageSize);
        //用户记录
        List<UserStateDTO> userStateDTOS = adminUserService.getUserByName(username);
        //获得 用户分页
        PageInfo<UserStateDTO> pageInfo = new PageInfo<UserStateDTO>(userStateDTOS);
        return pageInfo;
    }
    /**
     * 获得分页对象, pageNum是当前页数, pageSize是分页大小
     * @param pageNum
     * @param pageSize
     * @return
     */
    @RequestMapping(value = "pageInfo", method = RequestMethod.GET)
    public PageInfo<UserStateDTO> getPageInfo(int pageNum, int pageSize) {
        //调用一个pageHelper的一个静态方法
        PageHelper.startPage(pageNum, pageSize);
        //用户记录
        List<UserStateDTO> userStateDTOS = adminUserService.userList();
        //获得 用户分页
        PageInfo<UserStateDTO> pageInfo = new PageInfo<UserStateDTO>(userStateDTOS);
        return pageInfo;
    }
}
package com.hu.video.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hu.video.entity.TState;
import com.hu.video.entity.TUser;
import com.hu.video.entity.TVideo;
import com.hu.video.entity.TVideotype;
import com.hu.video.entity.dto.VideoInfoDTO;
import com.hu.video.service.IAdminVideoService;
import com.hu.video.service.IStateService;
import com.hu.video.service.IVideoService;
import com.hu.video.service.IVideoTypeService;
import com.hu.video.util.DateUtil;
import com.hu.video.util.MsgResponse;
import com.hu.video.util.VueUtil;
import com.mysql.jdbc.log.Log;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.List;
@RestController
@RequestMapping("admin")
public class AdminVideoController {
    @Autowired
    private IAdminVideoService adminVideoService;
    @Autowired
    private IStateService stateService;
    @Autowired
    private IVideoService videoService;
    @Autowired
    private IVideoTypeService videoTypeService;
    private static String aVideoTitle;
    @RequestMapping("deleteVideo/{id}")
    public String deleteVideo(@PathVariable Long id) {
        adminVideoService.deleteVideo(id);
        return "success";
    }
    @RequestMapping("editVideo")
    public String editVideo(@RequestBody TVideo video) {
        adminVideoService.editVideo(video);
        return "success";
    }
    @RequestMapping("getVideoById")
    public VideoInfoDTO getVideoById(Long id) {
        return adminVideoService.getVideoById(id);
    }
    @RequestMapping("getStateList")
    public List<TState> getStateList() {
        return adminVideoService.getStateList();
    }
    @RequestMapping("getVideoTypeList")
    public List<TVideotype> getVideoTypeList() {
        return adminVideoService.getVideoTypeList();
    }
    @RequestMapping("restoreVideo/{id}")
    public String restoreVideo(@PathVariable Long id) {
        adminVideoService.restoreVideo(id);
        return "success";
    }
    @RequestMapping("rdeleteVideo/{id}")
    public String rdeleteVideo(@PathVariable Long id) {
        adminVideoService.rdeleteVideo(id);
        return "success";
    }
    @RequestMapping("addVideo")
    public String addVideo(@RequestParam String videoTitle,@RequestParam Long videoStateId,
                           @RequestParam String videoInfo, @RequestParam Long videoTypeId) {
        TUser user = new TUser();
        user.setUserId(1L);
        TVideo video = new TVideo();
        video.setUser(user);
        TState state = stateService.getStateByStateId(videoStateId);
        video.setVideoState(state);
        video.setVideoType(videoTypeService.getVideoTypeByVideoTypeId(videoTypeId));
        video.setVideoInfo(videoInfo);
        video.setVideoTitle(videoTitle);
        aVideoTitle = videoTitle;
        videoService.addVideo(video);
        return "200";
    }
    @RequestMapping(value = "searchVideo", method = RequestMethod.GET)
    public PageInfo<VideoInfoDTO> searchVideo(int pageNum, int pageSize, String videoName) {
        //调用一个pageHelper的一个静态方法
        PageHelper.startPage(pageNum, pageSize);
        //视频记录
        List<VideoInfoDTO> videoInfoDTOs = adminVideoService.getiVideoByTitle(videoName);
        //获得 视频分页
        PageInfo<VideoInfoDTO> vidoePageInfo = new PageInfo<VideoInfoDTO>(videoInfoDTOs);
        return vidoePageInfo;
    }
    /**
     * 获得分页对象, pageNum是当前页数, pageSize是分页大小
     *
     * @param pageNum
     * @param pageSize
     * @return
     */
    @RequestMapping(value = "videoPageInfo", method = RequestMethod.GET)
    public PageInfo<VideoInfoDTO> getPageInfo(int pageNum, int pageSize) {
        //调用一个pageHelper的一个静态方法
        PageHelper.startPage(pageNum, pageSize);
        //视频记录
        List<VideoInfoDTO> videoInfoDTOs = adminVideoService.videoList();
        //获得 视频分页
        PageInfo<VideoInfoDTO> vidoePageInfo = new PageInfo<VideoInfoDTO>(videoInfoDTOs);
        return vidoePageInfo;
    }
    @RequestMapping(value = "underVideoPageInfo", method = RequestMethod.GET)
    public PageInfo<VideoInfoDTO> underVideoPageInfo(int pageNum, int pageSize) {
        //调用一个pageHelper的一个静态方法
        PageHelper.startPage(pageNum, pageSize);
        //视频记录
        List<VideoInfoDTO> videoInfoDTOs = adminVideoService.underVideoList();
        //获得 视频分页
        PageInfo<VideoInfoDTO> vidoePageInfo = new PageInfo<VideoInfoDTO>(videoInfoDTOs);
        return vidoePageInfo;
    }
    @RequestMapping("adminVideoUpload")
    public MsgResponse adminVideoUpload(@RequestParam MultipartFile file) {
        String workplace = System.getProperty("user.dir");
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().indexOf("."));
        String path = "/static/video/" + DateUtil.currentDateFormatString() + suffix;
        File newFile = new File(workplace + "/src/main/resources" + path);
        Long videoId = videoService.getVideoLastId(aVideoTitle);
        videoService.updateVideoPath(path, videoId);
        try {
            file.transferTo(newFile);
            return MsgResponse.success("上传成功", "http://localhost:8081" + path);
        } catch (IOException e) {
            e.printStackTrace();
            return MsgResponse.fail("上传失败");
        }
    }
    @RequestMapping("editThumbnailImageUpload")
    public VueUtil editThumbnailImageUpload(@RequestParam MultipartFile avatar, Long videoId) {
        String workplace = System.getProperty("user.dir");
        String suffix = avatar.getOriginalFilename().substring(avatar.getOriginalFilename().indexOf("."));
        String fileName = "video" + String.valueOf(videoId) + suffix;
        File newFile = new File(workplace + "/src/main/resources/static/vimages/" + fileName);
        videoService.adminUpdateVideoImage("/video/getVideoImage/" + fileName, videoId);
        try {
            avatar.transferTo(newFile);
            System.out.println("success");
            Object res = "http://localhost:8081/video/getVideoImage/video" + videoId + suffix;
            return VueUtil.success("上传成功", res);
        } catch (IOException e) {
            e.printStackTrace();
            return VueUtil.fail("上传失败");
        }
    }
    @RequestMapping("thumbnailImageupload")
    public VueUtil thumbnailImageupload(@RequestParam MultipartFile avatar) {
        String workplace = System.getProperty("user.dir");
        Long videoId = videoService.getVideoLastId(aVideoTitle);
        String suffix = avatar.getOriginalFilename().substring(avatar.getOriginalFilename().indexOf("."));
        String fileName = "video" + String.valueOf(videoId) + suffix;
        File newFile = new File(workplace + "/src/main/resources/static/vimages/" + fileName);
        videoService.adminUpdateVideoImage("/video/getVideoImage/" + fileName, videoId);
        try {
            avatar.transferTo(newFile);
            System.out.println("success");
            Object res = "http://localhost:8081/video/getVideoImage/video" + videoId + suffix;
            return VueUtil.success("上传成功", res);
        } catch (IOException e) {
            e.printStackTrace();
            return VueUtil.fail("上传失败");
        }
    }
}
package com.hu.video.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hu.video.entity.TVideotype;
import com.hu.video.service.IAdminVideoTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("admin")
public class AdminVideoTypeController {
    @Autowired
    private IAdminVideoTypeService adminVideoTypeService;
    @RequestMapping(value = "searchVideoType", method = RequestMethod.GET)
    public PageInfo<TVideotype> searchVideoType(int pageNum, int pageSize, String typeName) {
        //调用一个pageHelper的一个静态方法
        PageHelper.startPage(pageNum, pageSize);
        //视频记录
        List<TVideotype> videoTypes = adminVideoTypeService.getVideoTypeByName(typeName);
        //获得 视频分页
        PageInfo<TVideotype> vidoeTypeInfo = new PageInfo<TVideotype>(videoTypes);
        return vidoeTypeInfo;
    }
    @RequestMapping(value = "categoryPageInfo", method = RequestMethod.GET)
    public PageInfo<TVideotype> categoryPageInfo(int pageNum, int pageSize) {
        //调用一个pageHelper的一个静态方法
        PageHelper.startPage(pageNum, pageSize);
        //视频记录
        List<TVideotype> videoTypes = adminVideoTypeService.categoryList();
        //获得 视频分页
        PageInfo<TVideotype> vidoeTypeInfo = new PageInfo<TVideotype>(videoTypes);
        return vidoeTypeInfo;
    }
    @RequestMapping("addcategory")
    public String addVideoType(@RequestBody TVideotype videotype) {
        boolean flag = adminVideoTypeService.addVideoType(videotype);
        return flag ? "200" : "404";
    }
    @RequestMapping("getCategory")
    public TVideotype getCategory(Long id) {
        return adminVideoTypeService.getCategoryById(id);
    }
    @RequestMapping("deleteCategory/{id}")
    public String deleteCategory(@PathVariable("id") Long id) {
        boolean flag = adminVideoTypeService.deleteCategoryById(id);
        return flag ? "success" : "fail";
    }
}

五,项目总结


视频播放为人们提供了丰富的信息来源,并在一定程度上丰富了人们的精神文明。而传统的视频播放手段如电视播放、影院播放,都存在一定的局限性。人们亟需一种能够实时播放网络视频资源的产品,在线视频播放系统的出现大放异彩,它汇聚了众多网络视频资源,以方便、快捷的使用方式深深的吸引着广大使用者。网络视频系统出现的初期动机是人们对广播电视观看需求的增加,而广播电视又不能随人们心意进行推送播放视频。同时随着网络信息技术的不断更新迭代,网络在线视频播放系统更是层出不穷

与此同时人们逐渐发现现有的收看电视对自身来说是被动的,任何通过广播电台和电视台播放的节目都不能再满足一般观众的要求,所以在播放视频的需求上一般观看用户掌握了更多的选择权和主动权。有了广大用户的需求支持,越来越多的在线视频播放系统如雨后春笋一般争相推出。为了进一步解决所有人对电视节目的需求,为广大观众提供更多的选择。本课题旨在设计一个能够满足广大观众多元化需求的在线视频播放系统,在该系统中,用户可以根据自身需求搜素想看的视频,满足用户自身需求的同时赢得口碑,积累用户基数,从而开拓市场。

相关文章
|
2月前
vue3+Ts 二次封装ElementUI form表单
【10月更文挑战第8天】
264 59
|
2月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
186 1
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
118 62
|
12天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
72 13
|
20天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
92 2
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
3月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
239 3
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
|
2月前
|
JavaScript UED
Vue + ElementUI 实现动态添加和删除表单项的多层嵌套表单
【10月更文挑战第5天】本示例展示了如何在 Vue.js 中使用 Element UI 组件实现动态添加和删除嵌套表单项。该表单包含设备信息、设备部位及其对应的任务列表,支持用户动态添加设备部位和任务,并提供相应的表单验证规则。
259 0
Vue + ElementUI 实现动态添加和删除表单项的多层嵌套表单
|
3月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的蛋糕商城管理系统
基于Java+Springboot+Vue开发的蛋糕商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的蛋糕商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
197 3
基于Java+Springboot+Vue开发的蛋糕商城管理系统