基于javaweb的SpringBoot+JPA网盘系统设计和实现(java+springboot+ssm+jpa+thymeleaf+html+maven)

运行环境

Java≥8、MySQL≥5.7

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

210023062402

基于javaweb的SpringBoot+JPA网盘系统设计和实现(java+springboot+ssm+jpa+thymeleaf+html+maven)

很多同学都有自己的网盘,方便存储一些java学习教程。该毕业设计实现了一个简易的网盘,包含文件上传和文件分享等功能。 后端技术采用了spring,spring mvc,JPA,前端采用了thymeleaf模板语言。整体业务功能相对不是太复杂,亮点是文件分享功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    User dataBaseUser = userService.queryUserByUsername(userName);
if (dataBaseUser != null && encryptedPwd.equals(dataBaseUser.getPassWord())) {
User user = new User(userName, encryptedPwd, dataBaseUser.getLevelType(), dataBaseUser.getEmail(),
dataBaseUser.getPhone(), dataBaseUser.getAlias());
request.getSession().setAttribute("user", user);
logger.info("用户登录成功!");
map.put("result", "1");
map.put("userName", userName);
} else if (dataBaseUser != null && !encryptedPwd.equals(dataBaseUser.getPassWord())) {
logger.info("密码错误!");
map.put("result", "2");
} else {
logger.info("用户不存在!");
map.put("result", "0");
}
return map;
}

// 退出登录
@RequestMapping(value = "/quit", method = RequestMethod.GET)
public String loginOut(HttpServletRequest request) {
if (!SystemUtil.isWindows()) {
// 非windows环境下要删除用户文件
FileUtil.deleteDir(fileRootPath + WebUtil.getUserNameByRequest(request));
}

// 清除session
request.getSession().invalidate();
logger.info("退出登录成功!");
return "login";
}

// 注册
@RequestMapping(value = "/signin", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> signin(@RequestParam(required = false) String alias,
@RequestParam(required = true) String userName, @RequestParam(required = true) String password,
@RequestParam(required = false) String regcode, @RequestParam(required = false) String email,
@RequestParam(required = false) String phone, HttpServletRequest request, HttpServletResponse response) {
Map<String, Object> map = new HashMap<>();
String encryptedPwd = "";
try {
//加密的用户密码
encryptedPwd = Md5SaltTool.getEncryptedPwd(password);
} catch (NoSuchAlgorithmException e) {
logger.error("NoSuchAlgorithmException:", e);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
    String ffmepgpath = fileRootPath + "/ffmpeg/bin";
Map<String, Object> retmap = ConvertVideo.convertVideo(filepath, ffmepgpath);
String retstr = (String) retmap.get("flag");

j.setMsg((String) retmap.get("path"));
// 成功true并有路径,失败false也有路径,转码中false并且没路径
if ("complete".equals(retstr)) {
j.setSuccess(true);
} else if ("transcoding".equals(retstr)) {
// 这里转码中属于bug情况
j.setMsg("");
}
return j;
}

/**
* 获取云盘服务器所在盘磁盘空间大小
*
* @param request
*/
@GetMapping(value = "/getspacesize")
@ResponseBody
public ResponseMsg getSpaceSize(HttpServletRequest request) {
// 普通用户限制80G,guest用户限制40G,
String userName = WebUtil.getUserNameByRequest(request);
Map<String, String> spaceMap = new HashMap<>();
spaceMap.put("totalSpace", "80");
double totalSpace = 80;
if ("guest".equals(userName)) {
spaceMap.put("totalSpace", "40");
totalSpace = 40;
}
long dirlength = SystemUtil.getDirSpaceSize(fileRootPath + userName);
double dirlengthDouble = dirlength / 1024.0 / 1024 / 1024;
String usedeSpace = String.format("%.2f", dirlengthDouble);
logger.warn("usedeSpace:{}", usedeSpace);
String freeSpace = String.format("%.2f", totalSpace - Double.valueOf(usedeSpace));
logger.warn("freeSpace:{}", freeSpace);
spaceMap.put("freeSpace", freeSpace);
ResponseMsg responseMsg = new ResponseMsg();
responseMsg.setSuccess(true);
responseMsg.setMsg(JSONObject.toJSONString(spaceMap));

String aString = "ddssddsd";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
        logger.error("UnsupportedEncodingException:", e);
}
User dataBaseUser = userService.queryUserByUsername(encryptedPwd);
//regcode的重新写入
if (!iVerifyCodeService.isValid(regcode)) {
logger.info("注册失败,激活码失效或不正确!");
map.put("result", "2");
return map;
} else {
if (dataBaseUser == null) {
User user = new User(userName, encryptedPwd, "0", email, phone, alias);
userService.add(user);
logger.info("账号注册成功!");
map.put("result", "1");
} else {
logger.info("用户已经存在,请登录或换一个用户名!");
map.put("result", "0");
}
return map;
}
}

@RequestMapping(value = "/username", produces = "application/json; charset=utf-8")
@ResponseBody
public ResponseMsg fileRename(HttpServletRequest request) {
ResponseMsg j = new ResponseMsg();
// 获取用户名
User user = (User) request.getSession().getAttribute("user");
String userName = user.getUserName();
if (userName == null) {
userName = "null";
}
j.setMsg(userName);
j.setSuccess(true);
return j;
}

@RequestMapping(value = "/getUserByUserName")
@ResponseBody
public User getUserByUserName(HttpServletRequest request) {
User user = (User) request.getSession().getAttribute("user");
return user;
}

//更新当前用户信息
@RequestMapping(value = "/updateUserByUserName")
@ResponseBody
public ResponseMsg updateUserByUserName(@RequestParam(required = false) String username,
@RequestParam(required = false) String alias, @RequestParam(required = false) String password,
@RequestParam(required = false) String email, @RequestParam(required = false) String phone,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public ResponseMsg shareCallBack(String link) {
logger.warn("执行shareCallBack接口!:" + link);
ResponseMsg j = new ResponseMsg();
if (link.isEmpty()) {
j.setMsg("提取码为空!");
return j;
}
String downloadLink = fileService.fileShareCodeDecode(link);
logger.warn("downloadLink:" + downloadLink);
if (!"null".equals(downloadLink)) {
j.setSuccess(true);
j.setMsg(downloadLink);
} else {
j.setMsg("提取码不正确!");
}
return j;
}

// 文件分享下载地址sharefile(创建链接)-----share(定位到分享页面)-shareCallBack(验证提取码是否正确)
@RequestMapping(value = "/sharefile", produces = "application/json; charset=utf-8")
@ResponseBody
public ModelAndView shareFile(String link) {
logger.warn("shareFie接口的运行!");
String downloadLink = "";
if (!link.isEmpty()) {
// downloadLink= fileService.fileShareCodeDecode(link);
downloadLink = link;
}
//在数据库查找这个链接
logger.warn("zc1+downloadLink:" + downloadLink);
LinkSecret linkSecret = linkSecretService.findLinkSecretBysecretLink(downloadLink);
if (linkSecret == null) {
ModelAndView modelAndView = new ModelAndView("errorPage");
modelAndView.addObject("message", "链接失效");
return modelAndView;
} else {
Date date1 = linkSecret.getExpireDate();
//表示链接永久有效
if (date1 == null) {
ModelAndView modelAndView = new ModelAndView("shareSecret");
modelAndView.addObject("link", link);
return modelAndView;
} else {
//得到long类型当前时间
long dataTemp = System.currentTimeMillis();
Date date2 = new Date(dataTemp);
if (date1.before(date2)) {
//不能下载
ModelAndView modelAndView = new ModelAndView("errorPage");
modelAndView.addObject("message", link + "链接失效");
//删除本地共享文件夹的内容
FileUtil.delete(downloadLink);
return modelAndView;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    @RequestMapping(value = "/registerCode")
public ModelAndView registerCode(ModelAndView modelAndView, HttpServletRequest request) {
String username = WebUtil.getUserNameByRequest(request);
if ("sandeepin".equals(username) || "cflower".equals(username)) {
modelAndView.setViewName("registerCode");
return modelAndView;
} else {
modelAndView.setViewName("errorPage");
modelAndView.addObject("message", "没有权限生成验证码!");
return modelAndView;
}
}

/**
* 根据操作人的名字和要验证码人的名字来生成注册码
*
* @param customName
* @param request
* @return
*/
@RequestMapping(value = "proRegisterCode", produces = "application/json; charset=utf-8")
@ResponseBody
public ResponseMsg proRegisterCode(@RequestParam String customName, HttpServletRequest request) {
String registerCode = PassWordCreate.createPassWord(6);
VerifyCode verifyCode = new VerifyCode();
verifyCode.setState(false);
verifyCode.setRegisterCode(registerCode);
verifyCode.setOperatePerson(WebUtil.getUserNameByRequest(request));
verifyCode.setDate(new Date());
verifyCode.setCustomName(customName);
boolean result = iVerifyCodeService.save(verifyCode);
ResponseMsg responseMsg = new ResponseMsg();
responseMsg.setSuccess(result);
if (result) {
responseMsg.setMsg(registerCode);
} else {
responseMsg.setMsg("生成注册码失败,请重新操作!");
}
return responseMsg;
}
}
package com.bjpowernode.pan.config;





项目链接:
https://javayms.github.io?id=401422292105200fl
https://javayms.pages.dev?id=401422292105200fl