「这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战」
仿百度网盘开发的在线云盘系统
这次我们开发一个基于SpringBoot的仿百度网盘的系统,这个是在线的一个云盘系统。
技术栈是:Spring+Spring mvc+Springdata jpa+Bootstrap+jquery+Webuploader+Thymeleaf。
主要的功能有:注册登录,上传文件,图片预览,在线播放视频,重命名文件,在线播放音乐,分享文件。
显示云盘大小
上传文件
输入提取码
实体类的设计:
文件信息:文件名,链接,大小,时间,描述,转码(转码的值有:
*noneed:不需要转码,
* transcodable:可转码
* transcoding:转码中
* complete:转码完成
* failed:转码失败)
public class FileMsg {
private String name;
private String link;
private String size;
private String time;
private String description;
private String transcode = "noneed";
//getter,setter
}
给前台返回的操作结果:是否成功,信息
public class ResponseMsg {
private boolean success = false;
private String msg = "";
//getter,setter
}
分享信息(百度云盘分享文件的相关信息):文件名,下载次数,过期时间,分享时间,下载次数
public class ShareMessage {
private String fileName;
private int downloadNum;
private Date expireDate;
private String time;
private List<String> downloadName;
//getter,setter
}
视频转化
我们在云盘那里,经常会上传视频,但是视频是不能直接播放的,这个时候,我们需要把视频进行转化。
传过来的两个参数,url:视频源地址,ffmpegPath:存放目录。
1、先定义一个map,存放视频源地址和视频存放目录。
2、如果视频存放目录为空,直接给个新目录。
3、url.replace("/data/", fileRootPath + "/");得到新的视频地址。
4、往map存放路径和转码信息。
5、进行转码,如果成功直接返回map
public static Map<String, Object> convertVideo(String url, String ffmpegPath) {
Map<String, Object> map = new HashMap<>(2);
ffmpegTaskMap.put(url, map);
String toolPath = ffmpegPath;
if (StringUtils.isBlank(toolPath)) {
toolPath = getFfmpegPath();
}
url = url.replace("/data/", fileRootPath + "/");
String outputPath = getOutputPath(url);
map.put("path", outputPath);
map.put("flag", "transcoding");
try {
Boolean ffmpeg = FfmpegUtil.ffmpeg(toolPath, url, outputPath);
map.put("flag", (ffmpeg == true) ? "complete" : "failed");
} catch (Exception e) {
logger.error("Exception:", e);
}
return map;
}
实现效果: