Java毕业设计实战之在线网盘系统的实现

网友投稿 268 2022-08-31


Java毕业设计实战之在线网盘系统的实现

一、项目简述

功能:用户的邮箱注册、验证码验证以及用户登录。 不需要注册账号,也可以上传满足条件的临时文件,但是只4小时内有效。 文件的管理,上传、下载、重命名、删除、查看统计数据、分类管理等。 文件夹的管理,创建、删除、重命名。 文件的分享,支持通过链接和二维码的分享方式等等,以及管理员对用户的管理等等。

二、项目运行

环境配置:

Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)

项目技术:

jsP +Springboot+ SpringMVC + MyBatis + ThymeLeaf + FTP+ javascript + jquery + Ajax + maven等等

文件仓库控制器:

登录控制器:

/**

* @Description 登录控制器

* @return

**/

@Controller

public class LoginController extends BaseController {

private Logger logger = LogUtils.getInstance(LoginController.class);

/**

* @Description 免登陆用户入口,用于本地开发测试,上线运营为了安全请删除此方法

* @Author xw

* @Date 15:17 2020/2/26

* @Param []

* @return java.lang.String

**/

@GetMapping("/admin")

public String adminLogin(){

User user = userService.getUserByOpenId("123456");

logger.info("使用免登陆方式登录成功!"+user);

session.setAttribute("loginUser", user);

return "redirect:/index";

}

/**

* 用于注册流程,用户名,密码,邮箱等校验工作由前端来完成

*

* @param map 用于存储提示信息

* @author GGBOY

* @date 2020/1/28

*/

@PostMapping("/register")

public String register(User user, String code, Map map) {

String uCode = (String) session.getAttribute(user.getEmail() + "_code");

if (!code.equals(uCode)) {

map.put("errorMsg", "验证码错误");

return "index";

}

// 用户名去空格

user.setUserName(user.getUserName().trim());

user.setImagePath("https://p.qpic.cn/qqconnect/0/app_101851241_1582451550/100?max-age=2592000&t=0");

user.setRegisterTime(new Date());

user.setRole(1);

if (userService.insert(user)) {

FileStore store = FileStore.builder().userId(user.getUserId()).currentSize(0).build();

fileStoreService.addFileStore(store);

user.setFileStoreId(store.getFileStoreId());

userService.update(user);

logger.info("注册用户成功!当前注册用户" + user);

logger.info("注册仓库成功!当前注册仓库" + store);

} else {

map.put("errorMsg", "服务器发生错误,注册失败");

return "index";

}

session.removeAttribute(user.getEmail() + "_code");

session.setAttribute("loginUser", user);

return "redirect:/index";

}

/**

* 用户登录

* @param map 存储提示信息

* @return java.lang.String

* @author 莫提

* @date 2020/1/28

*/

@PostMapping("/login")

public String login(User user, Map map) {

User userByEmail = userService.getUserByEmail(user.getEmail());

if (userByEmail != null && userByEmail.getPassword().equals(user.getPassword())) {

session.setAttribute("loginUser", userByEmail);

logger.info("登录成功!"+userByEmail);

return "redirect:/index";

}else{

User user1 = userService.getUserByEmail(user.getEmail());

String errorMsg = user1 == null ? "该邮箱尚未注册" : "密码错误";

logger.info("登录失败!请确认邮箱和密码是否正确!");

//登录失败,将失败信息返回前端渲染

map.put("errorMsg", errorMsg);

return "index";

}

}

/**

* @return void

* @Description 向注册邮箱发送验证码, 并验证邮箱是否已使用

* @Author xw

* @Date 19:32 2020/1/29

* @Param [userName, email, password]

**/

@ResponseBody

@RequestMapping("/sendCode")

public String sendCode(String userName, String email, String password) {

User userByEmail = userService.getUserByEmail(email);

if (userByEmail != null) {

logger.error("发送验证码失败!邮箱已被注册!");

return "exitEmail";

}

logger.info("开始发送邮件.../n" + "获取的到邮件发送对象为:" + mailSender);

mailUtils = new MailUtils(mailSender);

String code = "123456";

session.setAttribute(http://email + "_code", code);

return "success";

}

/**

* @Description 请求QQ登录

* @Author xw

* @Date 18:27 2020/2/25

* @Param []

* @return void

**/

@GetMapping("/loginByQQ")

public void login() {

response.setContentType("text/html;charset=utf-8");

try {

response.sendRedirect(new Oauth().getAuthorizeURL(request));

logger.info("请求QQ登录,开始跳转...");

} catch (QQConnectException | IOException e) {

e.printStackTrace();

}

}

/**

* @Description QQ登录回调地址

* @Author xw

* @Date 18:27 2020/2/25

* @Param []

* @return java.lang.String

**/

@GetMapping("/connection")

public String connection() {

try {

AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);

String accessToken = null, openID = null;

long tokenExpireIn = 0L;

if ("".equals(accessTokenObj.getAccessToken())) {

logger.error("登录失败:没有获取到响应参数");

return "accessTokenObj=>" + accessTokenObj + "; accessToken" + accessTokenObj.getAccessToken();

} else {

accessToken = accessTokenObj.getAccessToken();

tokenExpireIn = accessTokenObj.getExpireIn();

logger.error("accessToken" + accessToken);

request.getSession().setAttribute("demo_access_token", accessToken);

request.getSession().setAttribute("demo_token_expirein", String.valueOf(tokenExpireIn));http://

// 利用获取到的accessToken 去获取当前用的openid -------- start

OpenID openIDObj = new OpenID(accessToken);

openID = openIDObj.getUserOpenID();

UserInfo qzoneUserInfo = new UserInfo(accessToken, openID);

UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();

if (userInfoBean.getRet() == 0) {

logger.info("用户的OPEN_ID: " + openID);

logger.info("用户的昵称: " + removeNonBmpUnicode(userInfoBean.getNickname()));

logger.info("用户的头像URI: " + userInfoBean.getAvatar().getAvatarURL100());

//设置用户信息

User user = userService.getUserByOpenId(openID);

if (user == null){

user = User.builder()

.openId(openID).userName(removeNonBmpUnicode(userInfoBean.getNickname()))

.imagePath(userInfoBean.getAvatar().getAvatarURL100()).

registerTime(new Date()).build();

if (userService.insert(user)){

logger.info("注册用户成功!当前注册用户" + user);

FileStore store = FileStore.builder().userId(user.getUserId()).build();

if (fileStoreService.addFileStore(store) == 1){

user.setFileStoreId(store.getFileStoreId());

userService.update(user);

logger.info("注册仓库成功!当前注册仓库" + store);

}

} else {

logger.error("注册用户失败!");

}

}else {

user.setUserName(removeNonBmpUnicode(userInfoBean.getNickname()));

user.setImagePath(userInfoBean.getAvatar().getAvatarURL100());

userService.update(user);

}

logger.info("QQ用户登录成功!"+user);

session.setAttribute("loginUser", user);

return "redirect:/index";

} else {

logger.error("很抱歉,我们没能正确获取到您的信息,原因是: " + userInfoBean.getMsg());

}

}

} catch (QQConnectException e) {

} finally {

logger.error("登录成功!");

}

return "登录失败!请查看日志信息...";

}

/**

* @Description 处理掉QQ网名中的特殊表情

* @Author xw

* @Date 18:26 2020/2/25

* @Param [str]

* @return java.lang.String 返回处理之后的网名

**/

public String removeNonBmpUnicode(String str) {

if (str == null) {

return null;

}

str = str.replaceAll("[^\\u0000-\\uFFFF]", "");

if ("".equals(str)) {

str = "($ _ $)";

}

return str;

}

/**

* @Description 退出登录,清空session

* @Author xw

* @Date 18:26 2020/2/25

* @Param []

* @return java.lang.String

**/

@GetMapping("/logout")

public String logout() {

logger.info("用户退出登录!");

session.invalidate();

return "redirect:/";

}

}

系统页面跳转控制器:

/**

* @ClassName: SystemController

* @Description: 系统页面跳转控制器

**/

@Controller

public class SystemController extends BaseController {

Logger logger = LogUtils.getInstance(SystemController.class);

/**

* @return java.lang.String

* @Description 前往我的网盘

* @Author xw

* @Date 23:28 2020/2/10

* @Param [fId, fName, error, map]

**/

@GetMapping("/files")

public String toFileStorePage(Integer fId, String fName, Integer error, Map map) {

//判断是否包含错误信息

if (error != null) {

if (error == 1) {

map.put("error", "添加失败!当前已存在同名文件夹");

}

if (error == 2) {

map.put("error", "重命名失败!文件夹已存在");

}

}

//包含的子文件夹

List folders = null;

//包含的文件

List files = null;

//当前文件夹信息

FileFolder nowFolder = null;

//当前文件夹的相对路径

List location = new ArrayList<>();

if (fId == null || fId <= 0) {

//代表当前为根目录

fId = 0;

folders = fileFolderService.getRootFoldersByFileStoreId(loginUser.getFileStoreId());

files = myFileService.getRootFilesByFileStoreId(loginUser.getFileStoreId());

nowFolder = FileFolder.builder().fileFolderId(fId).build();

location.add(nowFolder);

} else {

//当前为具体目录,访问的文件夹不是当前登录用户所创建的文件夹

FileFolder folder = fileFolderService.getFileFolderByFileFolderId(fId);

if (folder.getFileStoreId() - loginUser.getFileStoreId() != 0){

return "redirect:/error401Page";

}

//当前为具体目录,访问的文件夹是当前登录用户所创建的文件夹

folders = fileFolderService.getFileFolderByParentFolderId(fId);

files = myFileService.getFilesByParentFolderId(fId);

nowFolder = fileFolderService.getFileFolderByFileFolderId(fId);

//遍历查询当前目录

FileFolder temp = nowFolder;

while (temp.getParentFolderId() != 0) {

temp = fileFolderService.getFileFolderByFileFolderId(temp.getParentFolderId());

location.add(temp);

}

}

Collections.reverse(location);

//获得统计信息

FileStoreStatistics statistics = myFileService.getCountStatistics(loginUser.getFileStoreId());

map.put("statistics", statistics);

map.put("permission", fileStoreService.getFileStoreByUserId(loginUser.getUserId()).getPermission());

map.put("folders", folders);

map.put("files", files);

map.put("nowFolder", nowFolder);

map.put("location", location);

logger.info("网盘页面域中的数据:" + map);

return "u-admin/files";

}

/**

* @Description 前往文件上传页面

* @Author xw

* @Date 15:16 2020/2/26

* @Param [fId, fName, map]

* @return java.lang.String

**/

@GetMapping("/upload")

public String toUploadPage(Integer fId, String fName, Map map) {

//包含的子文件夹

List folders = null;

//当前文件夹信息

FileFolder nowFolder = null;

//当前文件夹的相对路径

List location = new ArrayList<>();

if (fId == null || fId <= 0) {

//代表当前为根目录

fId = 0;

folders = fileFolderService.getRootFoldersByFileStoreId(loginUser.getFileStoreId());

nowFolder = FileFolder.builder().fileFolderId(fId).build();

location.add(nowFolder);

} else {

//当前为具体目录

folders = fileFolderService.getFileFolderByParentFolderId(fId);

nowFolder = fileFolderService.getFileFolderByFileFolderId(fId);

//遍历查询当前目录

FileFolder temp = nowFolder;

while (temp.getParentFolderId() != 0) {

temp = fileFolderService.getFileFolderByFileFolderId(temp.getParentFolderId());

location.add(temp);

}

}

Collections.reverse(location);

//获得统计信息

FileStoreStatistics statistics = myFileService.getCountStatistics(loginUser.getFileStoreId());

map.put("statistics", statistics);

map.put("folders", folders);

map.put("nowFolder", nowFolder);

map.put("location", location);

logger.info("网盘页面域中的数据:" + map);

return "u-admin/upload";

}

/**

* @Description 前往所有文档页面

* @Author xw

* @Date 10:26 2020/2/26

* @Param [map]

* @return java.lang.String

**/

@GetMapping("/doc-files")

public String toDocFilePage( Map map) {

List files = myFileService.getFilesByType(loginUser.getFileStoreId(),1);

//获得统计信息

FileStoreStatistics statistics = myFileService.getCountStatistics(loginUser.getFileStoreId());

map.put("statistics", statistics);

map.put("files", files);

map.put("permission", fileStoreService.getFileStoreByUserId(loginUser.getUserId()).getPermission());

return "u-admin/doc-files";

}

/**

* @Description 前往所有图像页面

* @Author xw

* @Date 10:26 2020/2/26

* @Param [map]

* @return java.lang.String

**/

@GetMapping("/image-files")

public String toImageFilePage( Map map) {

List files = myFileService.getFilesByType(loginUser.getFileStoreId(),2);

//获得统计信息

FileStoreStatistics statistics = myFileService.getCountStatistics(loginUser.getFileStoreId());

map.put("statistics", statistics);

map.put("files", files);

map.put("permission", fileStoreService.getFileStoreByUserId(loginUser.getUserId()).getPermission());

return "u-admin/image-files";

}

/**

* @Description 前往所有视频页面

* @Author xw

* @Date 10:26 2020/2/26

* @Param [map]

* @return java.lang.String

**/

@GetMapping("/video-files")

public String toVideoFilePage( Map map) {

List files = myFileService.getFilesByType(loginUser.getFileStoreId(),3);

//获得统计信息

FileStoreStatistics statistics = myFileService.getCountStatistics(loginUser.getFileStoreId());

map.put("statistics", statistics);

map.put("files", files);

map.put("permission", fileStoreService.getFileStoreByUserId(loginUser.getUserId()).getPermission());

return "u-admin/video-files";

}

/**

* @Description 前往所有音频页面

* @Author xw

* @Date 10:26 2020/2/26

* @Param [map]

* @return java.lang.String

**/

@GetMapping("/music-files")

public String toMusicFilePage( Map map) {

List files = myFileService.getFilesByType(loginUser.getFileStoreId(),4);

//获得统计信息

FileStoreStatistics statistics = myFileService.getCountStatistics(loginUser.getFileStoreId());

map.put("statistics", statistics);

map.put("files", files);

map.put("permission", fileStoreService.getFileStoreByUserId(loginUser.getUserId()).getPermission());

return "u-admin/music-files";

}

/**

* @Description 前往其他文件页面

* @Author xw

* @Date 10:26 2020/2/26

* @Param [map]

* @return java.lang.String

**/

@GetMapping("/other-files")

public String toOtherFilePage( Map map) {

List files = myFileService.getFilesByType(loginUser.getFileStoreId(),5);

//获得统计信息

FileStoreStatistics statistics = myFileService.getCountStatistics(loginUser.getFileStoreId());

map.put("statistics", statistics);

RAvKQiC map.put("files", files);

map.put("permission", fileStoreService.getFileStoreByUserId(loginUser.getUserId()).getPermission());

return "u-admin/other-files";

}

/**

* @Description 登录之后的用户主页

* @Author xw

* @Date 10:28 2020/2/26

* @Param [map]

* @return java.lang.String

**/

@GetMapping("/index")

public String index(Map map) {

//获得统计信息

FileStoreStatistics statistics = myFileService.getCountStatistics(loginUser.getFileStoreId());

statistics.setFileStore(fileStoreService.getFileStoreById(loginUser.getFileStoreId()));

map.put("statistics", statistics);

return "u-admin/index";

}

/**

* @Description 前往帮助页面

* @Author xw

* @Date 15:17 2020/2/26

* @Param [map]

* @return java.lang.String

**/

@GetMapping("/help")

public String helpPage(Map map) {

//获得统计信息

FileStoreStatistics statistics = myFileService.getCountStatistics(loginUser.getFileStoreId());

map.put("statistics", statistics);

return "u-admin/help";

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:# yyds干货盘点 # 盘点一个函数参数传递方式的简单题目
下一篇:爬虫代理为什么会出现超时的情况?(爬虫超时处理)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~