基于微信小程序的短视频管理系统

news2024/11/15 21:54:30

末尾获取源码
开发语言:Java
Java开发工具:JDK1.8
后端框架:SSM
前端框架:VUE
数据库:MySQL5.7
服务器:Tomcat8.5
开发软件:IDEA / Eclipse
是否Maven项目:是


目录

一、项目简介

二、系统功能

三、系统项目截图

3.1小程序端

3.2发布者

3.3管理员

 四、核心代码

4.1登录相关

4.2文件上传

4.3封装


一、项目简介

基于微信小程序的短视频管理系统利用网络沟通、计算机信息存储管理,有着与传统的方式所无法替代的优点。比如计算检索速度特别快、可靠性特别高、存储容量特别大、保密性特别好、可保存时间特别长、成本特别低等。在工作效率上,能够得到极大地提高,延伸至服务水平也会有好的收获,有了网络,基于微信小程序的短视频管理系统的各方面的管理更加科学和系统,更加规范和简便。


二、系统功能

基于微信小程序的短视频管理系统主要包括三大功能模块,即用户功能模块和管理员功能模块、发布者功能模块。

(1)管理员模块:系统中的核心用户是管理员,管理员登录后,通过管理员来管理后台系统。主要功能有:首页、个人中心、用户管理、发布者管理、视频信息管理、频道分类管理、举报信息管理、系统管理。 

(2)发布者:首页、个人中心、视频信息管理。

(3)前台用户:首页、视频信息、我的。



三、系统项目截图

3.1小程序端

用户注册页面,输入用户的个人信息点击注册即可。

注册完成后会返回到登录页面,用户输入自己注册的账号密码即可登录成功

 

登录成功后我们可以看到有相关的视频还有视频信息,我的信息等。

视频信息推荐是按照点击次数进行推荐的,点击数越大越拍前。

 

选择自己想要视频点击进入观看

 

视频信息推荐底下还有公告信息,用户可以查看系统发布的公告信息。 

 

在视频信息中我们可以搜索自己想要的视频信息并且查看观看视频

观看视频后还可以对视频进行评价。

 

在我的中用户可以查看自己的收藏管理,也可以修改自己的信息等。

 

3.2发布者

 管理员和发布者可以在后台管理中登录后对前台的一些信息进行发布。

发布者进行发布,管理员进行审核是否通过。

发布者登录以后可以修改自己的密码和信息等。

发布者添加完成相关的视频信息内容后,提交后由管理员审核,审核通过显示在页面上。

3.3管理员

管理员登录后可以看到有首页、个人中心、用户管理、发布者管理、视频信息管理、频道分类管理、举报信息管理、系统管理。 

在发布者管理中管理员可以查看修改删除发布者信息。 

发布者发布视频后后显示在管理员页面审核中,由管理员进行审核,并且显示在页面中。 

对于一些举报内容管理可以查看并且进行回复。 


 四、核心代码

4.1登录相关


package com.controller;


import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private TokenService tokenService;

	/**
	 * 登录
	 */
	@IgnoreAuth
	@PostMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
	
	/**
	 * 注册
	 */
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

	/**
	 * 退出
	 */
	@GetMapping(value = "logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
	
	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
    	PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/list")
    public R list( UserEntity user){
       	EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

4.2文件上传

package com.controller;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.UUID;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.entity.EIException;
import com.service.ConfigService;
import com.utils.R;

/**
 * 上传文件映射表
 */
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
	@Autowired
    private ConfigService configService;
	/**
	 * 上传文件
	 */
	@RequestMapping("/upload")
	public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
		if (file.isEmpty()) {
			throw new EIException("上传文件不能为空");
		}
		String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
		File path = new File(ResourceUtils.getURL("classpath:static").getPath());
		if(!path.exists()) {
		    path = new File("");
		}
		File upload = new File(path.getAbsolutePath(),"/upload/");
		if(!upload.exists()) {
		    upload.mkdirs();
		}
		String fileName = new Date().getTime()+"."+fileExt;
		File dest = new File(upload.getAbsolutePath()+"/"+fileName);
		file.transferTo(dest);
		FileUtils.copyFile(dest, new File("C:\\Users\\Desktop\\jiadian\\springbootl7own\\src\\main\\resources\\static\\upload"+"/"+fileName));
		if(StringUtils.isNotBlank(type) && type.equals("1")) {
			ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
			if(configEntity==null) {
				configEntity = new ConfigEntity();
				configEntity.setName("faceFile");
				configEntity.setValue(fileName);
			} else {
				configEntity.setValue(fileName);
			}
			configService.insertOrUpdate(configEntity);
		}
		return R.ok().put("file", fileName);
	}
	
	/**
	 * 下载文件
	 */
	@IgnoreAuth
	@RequestMapping("/download")
	public ResponseEntity<byte[]> download(@RequestParam String fileName) {
		try {
			File path = new File(ResourceUtils.getURL("classpath:static").getPath());
			if(!path.exists()) {
			    path = new File("");
			}
			File upload = new File(path.getAbsolutePath(),"/upload/");
			if(!upload.exists()) {
			    upload.mkdirs();
			}
			File file = new File(upload.getAbsolutePath()+"/"+fileName);
			if(file.exists()){
				/*if(!fileService.canRead(file, SessionManager.getSessionUser())){
					getResponse().sendError(403);
				}*/
				HttpHeaders headers = new HttpHeaders();
			    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    
			    headers.setContentDispositionFormData("attachment", fileName);    
			    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
	}
	
}

4.3封装

package com.utils;

import java.util.HashMap;
import java.util.Map;

/**
 * 返回数据
 */
public class R extends HashMap<String, Object> {
	private static final long serialVersionUID = 1L;
	
	public R() {
		put("code", 0);
	}
	
	public static R error() {
		return error(500, "未知异常,请联系管理员");
	}
	
	public static R error(String msg) {
		return error(500, msg);
	}
	
	public static R error(int code, String msg) {
		R r = new R();
		r.put("code", code);
		r.put("msg", msg);
		return r;
	}

	public static R ok(String msg) {
		R r = new R();
		r.put("msg", msg);
		return r;
	}
	
	public static R ok(Map<String, Object> map) {
		R r = new R();
		r.putAll(map);
		return r;
	}
	
	public static R ok() {
		return new R();
	}

	public R put(String key, Object value) {
		super.put(key, value);
		return this;
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/196060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推荐一个跨平台支持Word, Excel, CSV, Email等30多种格式的操作库

更多开源项目请查看&#xff1a;一个专注推荐.Net开源项目的榜单 在我们日常项目开发中&#xff0c;经常需要解析操作文档&#xff0c;比如Office文档、Email文件、PDF、Xml、图片、Mp3等音频文件&#xff0c;操作Office、PDF文件我们需要用到IFilter&#xff0c;操作文本、图片…

【C++】引用与指针

专栏放在【C知识总结】&#xff0c;会持续更新&#xff0c;期待支持&#x1f339;引用引用的概念在C中&#xff0c;引用的本质其实就是给一个已经存在的变量”起别名“。也就是说&#xff0c;引用与它所引用的对象共用一块空间。&#xff08;同一块空间的多个名字&#xff09;就…

【搭建 mybatis 开发环境】

搭建 mybatis 开发环境 环境准备 创建数据库 创建maven 工程 pom文件&#xff1a;添加打包方式为jar 以及 mybatis 和 mysql 依赖 环境搭建 编写实体类 User.java&#xff1a;属性&#xff0c;生成get 和 set 方法 以及 toString方法 创建 IUserDao 接口&#xff0c;操作…

java进阶—一篇文章搞懂set 集合 及其底层实现

上节我们知道了List 下的两大 子类 ArrayList 跟 linkedList ArrayList 数组结构 查询快&#xff0c;增删慢 LinkedList 链表结构 查询慢&#xff0c;增删快 来看看我们今天的主角: Set Set 是 不可重复的&#xff0c;其底下也有两大子接口&#xff1a; HashSet&#xff1…

我用Python轻松玩转ChatGPT的聊天机器人和AI画画

ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型&#xff0c;一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人类一样来聊天交流&#xff0c;甚…

分享112个图片切换,总有一款适合您

分享112个图片切换&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 112个图片切换下载链接&#xff1a;https://pan.baidu.com/s/1Q6DzF8wIQ9rXwFjydI6_kw?pwdktxr 提取码&#xff1a;kt…

Leetcode.1145 二叉树着色游戏

题目链接 Leetcode.1145 二叉树着色游戏 Rating &#xff1a; 1741 题目描述 有两位极客玩家参与了一场「二叉树着色」的游戏。游戏中&#xff0c;给出二叉树的根节点 root&#xff0c;树上总共有 n个节点&#xff0c;且 n为奇数&#xff0c;其中每个节点上的值从 1到 n各不相…

关于“智能出价“的一些探索和实践

背景在移动数字广告营销的整个链路中&#xff0c;主要有三个主体&#xff0c;分别是媒体、adx和dsp.对于一个adx系统&#xff0c;主要有两个功能&#xff0c;分别是&#xff1a;向下对接媒体&#xff1a;汇聚下游的媒体广告流量向上对接dsp(广告主)&#xff1a;将媒体流量卖给上…

【C语言】看了这篇文章,如果你还不会文件操作的话,我把这篇文章给吃了(doge)

&#x1f6a9;write in front&#x1f6a9; &#x1f50e;大家好&#xff0c;我是謓泽&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f3c5;2021年度博客之星物联网与嵌入式开发TOP5&#xff5…

MyBatis注解CRUD执行流程剖析

MyBatis Study Notes Day03 结果映射ResultMap 引入resultMap–MyBatis中最强大的元素 数据库字段名&#xff1a;&#xff1a; 实体类字段名&#xff1a; public class User {private int id;private String name;private String password;如上所示&#xff0c;当sql的字段…

动态规划详解(1)——基础概念

动态规划是数学、编程中一个重要的算法动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是运筹学的一个分支&#xff0c;是求解决策过程最优化的过程。20世纪50年代初&#xff0c;美国数学家贝尔曼&#xff08;R.Bellman&#xff09;等人在研究多阶段决策过…

Java——根据身高重建队列

题目链接 leetcode在线oj题——根据身高重建队列 题目描述 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个…

Spring AOP表达式(execution)规则——排除切点的应用

背景 需要项目原切面的基础上排除一些类中方法。 本篇文章主要介绍了SpringBoot AOP Pointcut切入点表达式&#xff0c;以及如何排除某些类中的方法的方式。 execution(* com.winup.web.controller..*.*(..)) 参数说明 符号含义execution&#xff08;&#xff09;表达式的…

【C++之类和对象】默认成员函数

目录前言一、默认成员函数二、构造函数三、析构函数四、拷贝构造函数五、赋值运算符重载前言 前面我们学习了一些类和对象的基本知识&#xff0c;知道了什么是类&#xff0c;类中包括什么东西&#xff0c;以及能够使用一个类来实例化对象&#xff0c;并且会计算类对象的大小。这…

Java Collection 接口下的 “ List 集合” 与 “ Set 集合 ”

Java Collection接口下的“ List 集合” 与 “ Set 集合 ” 每博一文案 一个人最好的底牌&#xff0c;就这两个字: 靠谱,是最高级的聪明。 师父说&#xff1a;人生一回&#xff0c;道义一场&#xff0c;你对人对事的态度&#xff0c;藏着你一生的福报。 千金难买好人缘&#x…

SpringBoot(三):日志文件

目录一、日志文件1.1 日志文件的作用1.2 Spring Boot内置了日志框架1.3 日志的格式说明1.4 自定义日志打印1.5 日志的持久化1.6 日志的级别1.6.1 日志级别有什么作用1.6.2 日志的级别划分1.6.3 日志级别的设置1.7 使用lombok输出日志1.7.1 lombok的原理1.7.2 lombok其他注解一、…

在JS文件中使用或扩展已有的vue文件

工作中遇到一个给现有项目增加一个超时重新登录的提醒框&#xff08;可在提醒框中直接登录本账户&#xff09;。 由于页面稍微复杂&#xff0c;本人又是脚手架一把梭过来的&#xff0c;对于直接使用 js 来完成一整个复杂还带逻辑的页面稍显吃力&#xff0c;所以决定先写一个 vu…

建模助手【有求必应】的正确打开方式

今天的话题主要想解除大家对[有求必应] 的一些误解。 因为在日常的反馈中用户似乎对于[提需求] 这玩意儿无论是从概念上还是动作上都很不 “熟悉”。 其实我们对软件认知的上限是一个软件功能的上限&#xff0c;产品以及行业的发展都要从打破固有认知开始。 期待更多的你们跳出…

《新华日报·科技周刊》聚焦蓝海彤翔与《流浪地球2》

瞄准世界科技前沿瞄准江苏科技创新瞄准日常科技生活《新华日报科技周刊》第203期聚焦《流浪地球2》中的大国重器其实就在我们身边重点报道了蓝海创意云渲染农场为《流浪地球2》提供了云计算渲染服务的重要成果“数字生命计划”就是元宇宙吗&#xff1f;电影中人类面临末日危机&…

0基础如何入门人工智能?

1.1 概念 根据维基百科的解释&#xff0c;人工智能是被机器展示的智力&#xff0c;与人类和其他动物的自然智能相反&#xff0c;在计算机科学中 AI 研究被定义为 “代理人软件程序”&#xff1a;任何能够感受周围环境并且能最大化它成功机会的设备。 1.2 重大事件 2016 年 3…