package com.czxy.controller;
import com.czxy.enums.VideoStatusEnum;
import com.czxy.po.Bgm;
import com.czxy.po.Videos;
import com.czxy.service.BgmService;
import com.czxy.service.VideoService;
import com.czxy.utils.JSONResult;
import com.czxy.utils.MergeVideoMp3;
import io.swagger.annotations.*;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.UUID;
/**
* @author M(xqwQAQwq @ 163.com)
* @desc <p>videoController
* @date 2018/11/29 4:45 PM
*/
@RestController
@Api(value = "视频相关业务的接口", tags = {"视频相关业务的controller"})
@RequestMapping("/video")
public class VideoController extends BasicController {
@Autowired
private BgmService bgmService;
@Autowired
private VideoService videoService;
@ApiOperation(value = "上传视频", notes = "上传视频的接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "userId", value = "用户id", required = true, dataType = "String", paramType = "form"),
@ApiImplicitParam(name = "bgmId", value = "背景音乐id", required = false, dataType = "String", paramType = "form"),
@ApiImplicitParam(name = "videoSeconds", value = "背景音乐播放长度", required = true, dataType = "String", paramType = "form"),
@ApiImplicitParam(name = "videoWidth", value = "视频宽度", required = true, dataType = "String", paramType = "form"),
@ApiImplicitParam(name = "videoHeight", value = "视频高度", required = true, dataType = "String", paramType = "form"),
@ApiImplicitParam(name = "desc", value = "视频描述", required = false, dataType = "String", paramType = "form"),
})
@PostMapping(value = "/upload", headers = "content-type=multipart/form-data")
public JSONResult upload(String userId,
String bgmId, double videoSeconds, int videoWidth, int videoHight,
String desc,
@ApiParam(value = "短视频", required = true)
MultipartFile file) throws IOException {
FileOutputStream fileOutputStream = null;
InputStream inputStream = null;
if (StringUtils.isBlank(userId)) {
return JSONResult.errorMsg("用户id不能为空...");
}
//文件保存的命名空间
// String fileSpace = "/usr/local/programing/WeChartProject/video_dev/videos_dev_image";
//保存到数据库中的相对路径
String uploadPathDB = "/" + userId + "/video";
String finalvideoPath = "";
try {
//判断依稀如果接收的文件不等于null
if (file != null) {
//获取文件名
String filename = file.getOriginalFilename();
//获取文件名不能为null
if (StringUtils.isNotBlank(filename)) {
//文件上传的最终保存路径
finalvideoPath = FILE_SPACE + uploadPathDB + "/" + filename;
//设置数据库保存的路径
uploadPathDB += ("/" + filename);
//创建一个文件把上面确定的最终路径给他
File outFile = new File(finalvideoPath);
//确定这个文件的父文件夹不能为空 或 这个文件的父文件不能不是文件夹
if (outFile.getParentFile() != null || !outFile.getParentFile().isDirectory()) {
//创建父文件夹
outFile.getParentFile().mkdirs();
}
//将这个文件进行输出
fileOutputStream = new FileOutputStream(outFile);
//获得这个文件的输入
inputStream = file.getInputStream();
//使用工具进行copy
IOUtils.copy(inputStream, fileOutputStream);
}
} else {
return JSONResult.errorMsg("上传出错!");
}
} catch (Exception e) {
e.printStackTrace();
return JSONResult.errorMsg("上传错误,请重新上传");
} finally {
if (fileOutputStream != null) {
try {
fileOutputStream.flush();
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//判断bgmId是否为空,如果不为空
//那就查询bgm信息,并且合并视频,生产新的视频
if (StringUtils.isNotBlank(bgmId)) {
Bgm bgm = bgmService.queryBgmById(bgmId);
String mp3InputPath = FILE_SPACE + bgm.getPath();
MergeVideoMp3 tool = new MergeVideoMp3(FFMPEG_EXE);
String videoInputPath = finalvideoPath;
String videoOutputName = UUID.randomUUID().toString() + ".mp4";
uploadPathDB = "/" + userId + "/video" + "/" + videoOutputName;
finalvideoPath = FILE_SPACE + uploadPathDB;
tool.convertor(videoInputPath, mp3InputPath, videoSeconds, finalvideoPath);
}
// 保存视频信息到数据库
Videos video = new Videos();
// 设置bgmid(此处bgmid可以为空,有值则说明他选择了bgm,无值则说明他没有选择)
video.setAudioId(bgmId);
// 设置来自用户id
video.setUserId(userId);
// 设置视频大小
video.setVideoSeconds((float) videoSeconds);
// 设置视频的宽
video.setVideoWidth(videoWidth);
// 设置视频的高
video.setVideoHeight(videoHight);
// 设置视频的描述
video.setVideoDesc(desc);
// 设置视频的上传路径
video.setVideoPath(uploadPathDB);
// 设置状态
video.setStatus(VideoStatusEnum.SUCCESS.value);
// 设置创建时间
video.setCreateTime(new Date());
// 调用save方法保存
videoService.saveVideo(video);
//返回
return JSONResult.ok();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
随着移动互联网技术的发展和用户需求的变化,【小程序名称】应运而生,以其轻量化、便捷化的设计理念为用户提供了一种全新的服务模式。作为一款无需下载安装即可使用的应用,【小程序名称】依托于微信庞大的生态系统,让用户在微信内就能轻松实现各种功能操作。 【小程序名称】的核心功能主要集中在【具体服务领域】,例如在线购物、本地生活服务、教育学习或健康管理等。它简化了传统APP繁琐的注册登录流程,支持微信一键授权登录,极大地提升了用户体验。用户通过搜索或扫描二维码,瞬间即可开启使用,享受快速加载、流畅运行的服务。 该小程序界面设计简洁明了,布局合理,易于上手。同时,其特色功能如实时更新的信息推送、个性化推荐以及社交分享功能,让用户能够及时获取所需信息,并方便地将优质内容分享至朋友圈或好友,实现信息的高效传播与互动。 【小程序名称】注重数据安全与隐私保护,严格遵守国家法律法规和微信平台的规定,确保用户数据的安全无虞。此外,其背后的开发团队持续迭代更新,根据用户反馈不断优化产品性能,提升服务质量,致力于打造一个贴近用户需求、充满活力的小程序生态。 总结来说,【小程序名称】凭借其小巧便携、快捷高效的特性,不仅节省了用户的手机存储空间,更为用户提供了无缝衔接的便利服务,是现代生活中不可或缺的一部分,真正实现了“触手可及”的智能生活新体验。只需轻点屏幕,无限精彩尽在掌握之中。
资源推荐
资源详情
资源评论
收起资源包目录
微信小程序短视频后端-SpringBoot.zip (87个子文件)
SJT-code
videos-pojo
pom.xml 719B
src
main
java
com
czxy
po
UsersReport.java 3KB
UsersLikeVideos.java 1KB
Videos.java 5KB
Bgm.java 1KB
Users.java 4KB
UsersFans.java 919B
SearchRecords.java 839B
vo
UsersVO.java 4KB
Comments.java 2KB
videospojo.iml 80B
pom.xml 8KB
videos-mapper
pom.xml 719B
src
main
java
com
czxy
mapper
UsersLikeVideosMapper.java 230B
CommentsMapper.java 209B
UsersFansMapper.java 212B
BgmMapper.java 194B
SearchRecordsMapper.java 224B
VideosMapper.java 203B
UsersMapper.java 200B
UsersReportMapper.java 218B
videosmapper.iml 80B
videos-dev.iml 80B
m
logs
itzixi-web
log.log4j 0B
.idea
uiDesigner.xml 9KB
vcs.xml 180B
misc.xml 616B
inspectionProfiles
Project_Default.xml 2KB
compiler.xml 691B
encodings.xml 522B
videos-service
pom.xml 722B
src
main
java
com
czxy
service
UserService.java 597B
BgmService.java 324B
impl
VideoServiceImpl.java 1009B
UserServiceImpl.java 2KB
BgmServiceImpl.java 879B
VideoService.java 257B
videos-manenge
pom.xml 2KB
src
main
resources
generatorConfig.xml 1KB
application.properties 2KB
log4j.properties 1KB
config.properties 696B
com
czxy
mapper
UsersReportMapper.xml 835B
VideosMapper.xml 1KB
UsersMapper.xml 923B
UsersLikeVideosMapper.xml 542B
SearchRecordsMapper.xml 468B
CommentsMapper.xml 690B
UsersFansMapper.xml 526B
BgmMapper.xml 574B
java
com
czxy
Swagger2.java 2KB
controller
BasicController.java 655B
RegistLoginController.java 6KB
VideoController.java 6KB
UserController.java 5KB
BgmController.java 1KB
VideosManengeApplication.java 450B
WebMvcConfig.java 764B
.gitignore 366B
videos-common
pom.xml 5KB
src
main
java
org
n3r
idworker
Id.java 769B
RandomCodeStrategy.java 141B
WorkerIdStrategy.java 140B
DayCode.java 599B
InvalidSystemClock.java 166B
utils
Utils.java 3KB
HttpReq.java 4KB
IPv4Utils.java 2KB
Props.java 2KB
Serializes.java 3KB
Ip.java 2KB
Sid.java 2KB
Test.java 181B
Code.java 972B
IdWorker.java 3KB
strategy
DefaultWorkerIdStrategy.java 6KB
FileLock.java 4KB
DefaultRandomCodeStrategy.java 5KB
DayPrefixRandomCodeStrategy.java 1001B
com
czxy
utils
FFMpegTest.java 2KB
MergeVideoMp3.java 2KB
MapperUtils.java 245B
RedisOperator.java 4KB
JSONResult.java 2KB
MD5Utils.java 587B
enums
VideoStatusEnum.java 352B
videoscommon.iml 80B
共 87 条
- 1
资源评论
JJJ69
- 粉丝: 6216
- 资源: 5783
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功