短视频社交|电影点播平台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
三,系统展示
前端系统展示
注册登陆
播放视频
个人中心
消息中心
视频中心
视频上传
后台管理模块
用户管理
播放量统计
视频管理
视频审核
视频分类管理
四,核心代码展示
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 {@Autowiredprivate IAdminEChartService adminEChartService;@RequestMapping("getFilmData")@ResponseBodypublic List<String> getFilmData() {return adminEChartService.getFilmData();}@RequestMapping("getData")@ResponseBodypublic 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 {@Autowiredprivate IAdminUserService adminUserService;@Autowiredprivate 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 {@Autowiredprivate IAdminVideoService adminVideoService;@Autowiredprivate IStateService stateService;@Autowiredprivate IVideoService videoService;@Autowiredprivate 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 {@Autowiredprivate 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";}}
五,项目总结
视频播放为人们提供了丰富的信息来源,并在一定程度上丰富了人们的精神文明。而传统的视频播放手段如电视播放、影院播放,都存在一定的局限性。人们亟需一种能够实时播放网络视频资源的产品,在线视频播放系统的出现大放异彩,它汇聚了众多网络视频资源,以方便、快捷的使用方式深深的吸引着广大使用者。网络视频系统出现的初期动机是人们对广播电视观看需求的增加,而广播电视又不能随人们心意进行推送播放视频。同时随着网络信息技术的不断更新迭代,网络在线视频播放系统更是层出不穷
与此同时人们逐渐发现现有的收看电视对自身来说是被动的,任何通过广播电台和电视台播放的节目都不能再满足一般观众的要求,所以在播放视频的需求上一般观看用户掌握了更多的选择权和主动权。有了广大用户的需求支持,越来越多的在线视频播放系统如雨后春笋一般争相推出。为了进一步解决所有人对电视节目的需求,为广大观众提供更多的选择。本课题旨在设计一个能够满足广大观众多元化需求的在线视频播放系统,在该系统中,用户可以根据自身需求搜素想看的视频,满足用户自身需求的同时赢得口碑,积累用户基数,从而开拓市场。
短视频社交|电影点播平台Springboot+vue+ElementUI前后端分离相关推荐
- 基于SSM+SpringBoot+Vue+ElementUI前后端分离的校园岗位招聘就业管理系统
运行视频 基于SSM+SpringBoot+Vue+ElementUI前后端分离的校园岗位招聘就业管理系统 项目运行截图 学生管理 添加学生 学生信息 教师管理 教师信息 实习基地 公告信息 公司管理 ...
- springboot+vue +ElementUI前后端分离框架搭建教程
项目介绍 一款 Java 语言基于 SpringBoot2.x.MybatisPlus.Vue.ElementUI.MySQL等框架精心打造的一款前后端分离框架,致力于实现模块化.组件化.可插拔的前后 ...
- 视频教程-springboot+Vue整合前后端分离权限后台管理系统-Java
springboot+Vue整合前后端分离权限后台管理系统 拥有八年的Java项目开发经验,擅长Java.vue.SpringBoot.springCloud.spring.springmvc.myb ...
- dotnetcore+vue+elementUI 前后端分离 三(前端篇)
说明: 本项目使用了 mysql employees数据库,使用了vue + axois + element UI 2.0 ,演示了 单页程序 架构 ,vue router 的使用,axois 使用, ...
- 鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统
鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统 1. 项目背景 一.随着公司的快速发展,企业人员和经 ...
- shiro+php,一套基于SpringBoot+Vue+Shiro 前后端分离 开发的代码生成器
一.前言 最近花了一个月时间完成了一套基于Spring Boot+Vue+Shiro前后端分离的代码生成器,目前项目代码已基本完成 止步传统CRUD,进阶代码优化: 该项目可根据数据库字段动态生成 c ...
- 基于Springboot+Vue实现前后端分离商城管理系统
项目编号:BS-SC-030 一,项目简介 新新商城,一款基于 Springboot+Vue 的电商项目,前后端分离项目.完整的实现了一个商城系统应有的基本功能,包括但不限于以下主要功能模块: 前端商 ...
- SpringBoot + Vue 开发前后端分离的旅游管理系统
旅游管理系统 项目简介 项目演示 数据库建表 环境搭建 引入依赖(pom.xml) 配置文件(application.properties) href="javascript:;" ...
- springboot+vue的前后端分离与合并方案
pringboot和vue结合的方案网络上的主要有以下两种: 1. [不推荐]在html中直接使用script标签引入vue和一些常用的组件,这种方式和以前传统的开发是一样的,只是可以很爽的使用vue ...
最新文章
- 最常用的CURL命令大全
- 数据结构一:链表(循环链表)
- arcgis怎么用python重新排序,使用ArcGIS脚本工具将点数据进行排序并编号
- 小程序 setData 中的坑,其实好像...
- go-mysql查询单条数据_Golang 从 MySQL 数据库读取一条数据
- docker build 中的上下文路径
- HTML-超链接锚点笔记
- Python基础笔记(四)切片、列表生成式、迭代
- python爬虫下载模块_python爬虫模块之HTML下载模块
- 24速算c语言实训报告ppt,C语言课程设计(速算24).doc
- 2021年JAVA面试题~集合篇附带答案
- Python ADF 单位根检验 结果理解
- 统计学考研笔记:正态分布置信区间计算题
- 即时聊天通讯软件安卓+ios双端原生源码
- 软件工程师必须掌握的知识结构
- 编解码学习笔记(四) Mpeg系列——Mpeg 4
- OpenGL学习脚印:伽马校正(Gamma Correction)
- Siri 语音识别 Speech
- 我国智能安防细分市场规模分析
- 操作word文档书签
热门文章
- oracle.net.ns.NetException:Socket read timed out update
- 删除无法删除的文件/文件夹
- LeetCode算法刷题目录 (Java)
- c:\Windows\system32\ regsvr32.exe Windows无法访问指定设备、路径或文件,你可能没有适当的权限访问该项目
- 第 296 场力扣周赛(C语言解
- Docker 入门到实践(三)Docker 安装
- 实验一 顺序与选择结构(Python 头歌)
- 计算机如何安装无线网络适配器,无线网络适配器是什么,无线网络适配器如何设置...
- OpenCV + CPP 系列(卌一)图像特征匹配( FLANN 匹配)
- 代号海岸线如何用电脑玩 代号海岸线PC电脑版玩法教程