很多同学都有自己的网盘,方便存储一些java学习教程。该毕业设计实现了一个简易的网盘,包含文件上传和文件分享等功能。
后端技术采用了spring,spring mvc,JPA,前端采用了thymeleaf模板语言。整体业务功能相对不是太复杂,亮点是文件分享功能。
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
Boolean[] b = fileService.userFileDelete(fileName, userName, path);
boolean flag = true;
for (int i = 0; i < b.length; i++) {
if (b[i] == false) {
flag = false;
}
}
if (flag) {
j.setSuccess(true);
j.setMsg("删除成功!");
} else {
j.setMsg("删除失败!");
}
return j;
}
// 文件重命名 文件夹重命名时 老名字写path 新名字写newName oldName填@dir@
@RequestMapping(value = "/filerename", produces = "application/json; charset=utf-8")
@ResponseBody
public ResponseMsg fileRename(String oldName, String newName, String path, HttpServletRequest request) {
if (path == null) {
path = "/";
}
ResponseMsg j = new ResponseMsg();
if (oldName.isEmpty() || newName.isEmpty()) {
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接口的运行!");
public ResponseMsg transCodeStatus(String path, HttpServletRequest request) {
if (path == null) {
path = "/";
}
logger.warn("transCodeStatus():" + path);
logger.warn("ffmpegTaskMap:" + JSONObject.toJSONString(FfmpegUtil.ffmpegTaskMap));
ResponseMsg responseMsg = new ResponseMsg();
responseMsg.setMsg("noneed");
responseMsg.setSuccess(true);
// 判断文件转码情况
Map<String, Object> map = FfmpegUtil.ffmpegTaskMap.get(path);
if (null != map) {
Boolean transcode = (Boolean) map.get("flag");
if (transcode) {
responseMsg.setMsg("complete");
} else {
responseMsg.setMsg("transcoding");
}
}
return responseMsg;
}
// 文件删除
@RequestMapping(value = "/filedelete", produces = "application/json; charset=utf-8")
@ResponseBody
public ResponseMsg fileDelete(String fileName, String path, HttpServletRequest request) {
if (path == null) {
}
// 获取用户名
String userName = WebUtil.getUserNameByRequest(request);
// 列出用户文件
List<FileMsg> fileMsgList = fileService.userFileList(userName, path);
// 判断文件转码情况
for (FileMsg fileMsg : fileMsgList) {
// 跳过文件夹
if (fileMsg.getSize().equals("Directory")) {
continue;
}
// 正常文件
int suffixidx = (int) StringUtil.getfilesuffix(fileMsg.getName(), true);
String suffix = fileMsg.getName().substring(suffixidx);
if (suffix.equals("mkv") || suffix.equals("rmvb") || suffix.equals("avi") || suffix.equals("wmv")
|| suffix.equals("3gp") || suffix.equals("rm")) {
// 取非文件夹的所有文件名
return j;
}
// 获取用户名
String userName = WebUtil.getUserNameByRequest(request);
// String userName ="zc";
// 下载文件,获取下载路径,这个是 个映射的路径
String link = fileService.download(fileName, userName, path);
try {
//这里校验要填真实的路经
String newLink = link.replace("/data/", fileRootPath);
String[] md5Array = FileSplit.splitBySizeSubSection(newLink, size,
fileRootPath + "/tempMd5/" + userName + "/");
j.setObj(md5Array);
String password = request.getParameter("password");
String encryptedPwd = "";
try {
//加密的用户密码
encryptedPwd = Md5SaltTool.getEncryptedPwd(password);
logger.warn("encryptedPwd:" + encryptedPwd);
} catch (NoSuchAlgorithmException e) {
logger.error("Exception:", e);
} catch (UnsupportedEncodingException e) {
logger.error("Exception:", e);
}
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());
}
// 获取用户名
String userName = WebUtil.getUserNameByRequest(request);
// 上传文件
boolean b = fileService.upload(file, userName, path);
// 反馈用户信息
if (b) {
j.setSuccess(true);
j.setMsg("上传成功!");
} else {
j.setMsg("上传失败!");
}
return j;
}
// 文件下载
@RequestMapping(value = "/download", produces = "application/json; charset=utf-8")
@ResponseBody
public ResponseMsgAdd download(@RequestParam String fileName, String path, HttpServletRequest request) {
if (path == null) {
try {
//加密的用户密码
encryptedPwd = Md5SaltTool.getEncryptedPwd(password);
} catch (NoSuchAlgorithmException e) {
logger.error("NoSuchAlgorithmException:", e);
} catch (UnsupportedEncodingException e) {
logger.error("UnsupportedEncodingException:", e);
}
User dataBaseUser = userService.queryUserByUsername(encryptedPwd);
//regcode的重新写入
if (!iVerifyCodeService.isValid(regcode)) {
logger.info("注册失败,激活码失效或不正确!");
map.put("result", "2");
return map;
} else {
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,
HttpServletRequest request) {
ResponseMsg j = new ResponseMsg();
User user = (User) request.getSession().getAttribute("user");
if (username != null) {
user.setUserName(username);
}
if (alias != null) {
user.setAlias(alias);
}
if (password != null) {
try {
String encryptedPwd = Md5SaltTool.getEncryptedPwd(password);
user.setPassWord(encryptedPwd);
} catch (NoSuchAlgorithmException e) {
logger.error("NoSuchAlgorithmException:", e);
} catch (UnsupportedEncodingException e) {
logger.error("UnsupportedEncodingException:", e);
}
}
public List<FileMsg> userFileList(@RequestParam(required = false) String key, String path,
HttpServletRequest request) {
if (path == null) {
path = "/";
}
// 获取用户名
String userName = WebUtil.getUserNameByRequest(request);
// 列出用户文件
List<FileMsg> fileMsgList = fileService.userFileList(userName, path);
// 判断文件转码情况
for (FileMsg fileMsg : fileMsgList) {
// 跳过文件夹
if (fileMsg.getSize().equals("Directory")) {
continue;
}
// 正常文件
int suffixidx = (int) StringUtil.getfilesuffix(fileMsg.getName(), true);
String suffix = fileMsg.getName().substring(suffixidx);
if (suffix.equals("mkv") || suffix.equals("rmvb") || suffix.equals("avi") || suffix.equals("wmv")
|| suffix.equals("3gp") || suffix.equals("rm")) {
// 取非文件夹的所有文件名
List<String> namelist = fileMsgList.stream()
.filter(f -> !f.getSize().equals("Directory"))
.map(FileMsg::getName)
.collect(Collectors.toList());
// 含有转码文件的情况下
ResponseMsg responseMsg = new ResponseMsg();
responseMsg.setSuccess(true);
responseMsg.setMsg(link);
return responseMsg;
} else {
logger.warn("密码不正确!");
ResponseMsg responseMsg = new ResponseMsg();
responseMsg.setSuccess(false);
responseMsg.setMsg("密码不正确!");
return responseMsg;
}
}
// 文件提取码生成,当再次分享同一个文件,只更新过期时间
@RequestMapping(value = "/generateShareLink", produces = "application/json; charset=utf-8")
@ResponseBody
public ResponseMsg generateShareLink(@RequestParam String expireDay, String fileName, String path,
HttpServletRequest request) {
String expireDayString = expireDay;
int expireDays = 3;
if (expireDayString != null) {
if (expireDayString.equals("永久有效")) {
expireDays = -1;
} else {
expireDays = Integer.parseInt(expireDayString);
}
}
if (path == null) {