软件编程
位置:首页>> 软件编程>> java编程>> Java毕业设计实战之在线网盘系统的实现

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

作者:OldWinePot  发布时间:2023-03-05 05:42:47 

标签:Java,在线网盘,毕业设计,大作业

一、项目简述

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

二、项目运行

环境配置:

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

项目技术:

JSP +Springboot+ SpringMVC + MyBatis + ThymeLeaf + FTP+ JavaScript + JQuery + Ajax + maven等等

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

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

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

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

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

文件仓库控制器:


/**
* @ClassName: FileStoreController
* @Description: 文件仓库控制器
**/
@Controller
public class FileStoreController extends BaseController {
   private Logger logger = LogUtils.getInstance(FileStoreController.class);

/**
    * @Description 上传临时文件
    * @Author xw
    * @Date 23:14 2020/3/9
    * @Param [files]
    * @return void
    **/
   @PostMapping("/uploadTempFile")
   public String uploadTempFile(@RequestParam("file") MultipartFile file,String url) {
       session.setAttribute("imgPath","https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2654852821,3851565636&fm=26&gp=0.jpg");
       String name = file.getOriginalFilename().replaceAll(" ","");
       if (!checkTarget(name)){
           logger.error("临时文件上传失败!文件名不符合规范...");
           session.setAttribute("msg", "上传失败!文件名不符合规范");
           return "redirect:/temp-file";
       }
       SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
       String dateStr = format.format(new Date());
       String path = "temp/"+dateStr +"/"+UUID.randomUUID();
       try {
           if (FtpUtil.uploadFile("/"+path, name, file.getInputStream())){
               //上传成功
               logger.info("临时文件上传成功!"+name);
               String size = String.valueOf(file.getSize());
               TempFile tempFile = TempFile.builder().fileName(name).filePath(path).size(size).uploadTime(new Date()).build();
               if (tempFileService.insert(tempFile)) {
                   try {
                       String id = UUID.randomUUID().toString();
                       String p = request.getSession().getServletContext().getRealPath("/user_img/");
                       Long t = tempFile.getUploadTime().getTime();
                       url = url+"/file/share?t="+ UUID.randomUUID().toString().substring(0,10) +"&f="+tempFile.getFileId()+"&p="+size+"&flag=2";
                       File targetFile = new File(p, "");
                       if (!targetFile.exists()) {
                           targetFile.mkdirs();
                       }
                       File f = new File(p, id + ".jpg");
                       if (!f.exists()){
                           //文件不存在,开始生成二维码并保存文件
                           OutputStream os = new FileOutputStream(f);
                           QRCodeUtil.encode(url, "/static/img/logo.png", os, true);
                           os.close();
                       }
                       //异步删除临时文件
                       tempFileService.deleteById(tempFile.getFileId());
                       session.setAttribute("imgPath","user_img/"+id+".jpg");
                       session.setAttribute("url",url);
                       session.setAttribute("msg","上传成功,扫码/访问链接 即可下载!");
                       return "redirect:/temp-file";
                   } catch (Exception e) {
                       e.printStackTrace();
                   }
               }else {
                   logger.info("临时文件数据库写入失败!"+name);
                   session.setAttribute("url","error");
                   session.setAttribute("msg", "服务器出错了,临时文件上传失败!");
               }
           }else{
               //上传失败
               logger.info("临时文件上传失败!"+name);
               session.setAttribute("url","error");
               session.setAttribute("msg", "服务器出错了,上传失败!");
           }
       } catch (IOException e) {
           e.printStackTrace();
       }
       return "redirect:/temp-file";
   }

/**
    * @Description 网盘的文件上传
    * @Author xw
    * @Date 23:10 2020/2/10
    * @Param [files]
    * @return java.util.Map<java.lang.String,java.lang.Object>
    **/
   @PostMapping("/uploadFile")
   @ResponseBody
   public Map<String, Object> uploadFile(@RequestParam("file") MultipartFile files) {
       Map<String, Object> map = new HashMap<>();
       if (fileStoreService.getFileStoreByUserId(loginUser.getUserId()).getPermission() != 0){
           logger.error("用户没有上传文件的权限!上传失败...");
           map.put("code", 499);
           return map;
       }
       FileStore store = fileStoreService.getFileStoreByUserId(loginUser.getUserId());
       Integer folderId = Integer.valueOf(request.getHeader("id"));
       String name = files.getOriginalFilename().replaceAll(" ","");
       //获取当前目录下的所有文件,用来判断是否已经存在
       List<MyFile> myFiles = null;
       if (folderId == 0){
           //当前目录为根目录
           myFiles = myFileService.getRootFilesByFileStoreId(loginUser.getFileStoreId());
       }else {
           //当前目录为其他目录
           myFiles = myFileService.getFilesByParentFolderId(folderId);
       }
       for (int i = 0; i < myFiles.size(); i++) {
           if ((myFiles.get(i).getMyFileName()+myFiles.get(i).getPostfix()).equals(name)){
               logger.error("当前文件已存在!上传失败...");
               map.put("code", 501);
               return map;
           }
       }
       SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
       String dateStr = format.format(new Date());
       String path = loginUser.getUserId()+"/"+dateStr +"/"+folderId;
       if (!checkTarget(name)){
           logger.error("上传失败!文件名不符合规范...");
           map.put("code", 502);
           return map;
       }
       Integer sizeInt = Math.toIntExact(files.getSize() / 1024);
       //是否仓库放不下该文件
       if(store.getCurrentSize()+sizeInt > store.getMaxSize()){
           logger.error("上传失败!仓库已满。");
           map.put("code", 503);
           return map;
       }
       //处理文件大小
       String size = String.valueOf(files.getSize()/1024.0);
       int indexDot = size.lastIndexOf(".");
       size = size.substring(0,indexDot);
       int index = name.lastIndexOf(".");
       String tempName = name;
       String postfix = "";
       int type = 4;
       if (index!=-1){
           tempName = name.substring(index);
           name = name.substring(0,index);
           //获得文件类型
           type = getType(tempName.toLowerCase());
           postfix = tempName.toLowerCase();
       }
       try {
           //提交到FTP服务器
           boolean b = FtpUtil.uploadFile("/"+path, name + postfix, files.getInputStream());
           if (b){
               //上传成功
               logger.info("文件上传成功!"+files.getOriginalFilename());
               //向数据库文件表写入数据
               myFileService.addFileByFileStoreId(
                       MyFile.builder()
                             .myFileName(name).fileStoreId(loginUser.getFileStoreId()).myFilePath(path)
                             .downloadTime(0).uploadTime(new Date()).parentFolderId(folderId).
                             size(Integer.valueOf(size)).type(type).postfix(postfix).build());
               //更新仓库表的当前大小
               fileStoreService.addSize(store.getFileStoreId(),Integer.valueOf(size));
               try {
                   Thread.sleep(5000);
                   map.put("code", 200);
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
           }else{
               logger.error("文件上传失败!"+files.getOriginalFilename());
               map.put("code", 504);
           }
       } catch (IOException e) {
           e.printStackTrace();
       }
       return map;
   }

/**
    * @Description 网盘的文件下载
    * @Author xw
    * @Date 23:13 2020/2/10
    * @Param [fId]
    * @return void
    **/
   @GetMapping("/downloadFile")
   public String downloadFile(@RequestParam Integer fId){
       if (fileStoreService.getFileStoreByUserId(loginUser.getUserId()).getPermission() == 2){
           logger.error("用户没有下载文件的权限!下载失败...");
           return "redirect:/error401Page";
       }
       //获取文件信息
       MyFile myFile = myFileService.getFileByFileId(fId);
       String remotePath = myFile.getMyFilePath();
       String fileName = myFile.getMyFileName()+myFile.getPostfix();
       try {
           //去FTP上拉取
           OutputStream os = new BufferedOutputStream(response.getOutputStream());
           response.setCharacterEncoding("utf-8");
           // 设置返回类型
           response.setContentType("multipart/form-data");
           // 文件名转码一下,不然会出现中文乱码
           response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));
           boolean flag = FtpUtil.downloadFile("/" + remotePath, fileName, os);
           if (flag) {
               myFileService.updateFile(
                       MyFile.builder().myFileId(myFile.getMyFileId()).downloadTime(myFile.getDownloadTime() + 1).build());
               os.flush();
               os.close();
               logger.info("文件下载成功!" + myFile);
           }
       } catch (Exception e) {
           e.printStackTrace();
       }
       return "success";
   }

/**
    * @Description 删除文件
    * @Author xw
    * @Date 23:14 2020/2/10
    * @Param [fId, folder]
    * @return java.lang.String
    **/
   @GetMapping("/deleteFile")
   public String deleteFile(@RequestParam Integer fId,Integer folder){
       //获得文件信息
       MyFile myFile = myFileService.getFileByFileId(fId);
       String remotePath = myFile.getMyFilePath();
       String fileName = myFile.getMyFileName()+myFile.getPostfix();
       //从FTP文件服务器上删除文件
       boolean b = FtpUtil.deleteFile("/"+remotePath, fileName);
       if (b){
           //删除成功,返回空间
           fileStoreService.subSize(myFile.getFileStoreId(),Integer.valueOf(myFile.getSize()));
           //删除文件表对应的数据
           myFileService.deleteByFileId(fId);
       }
       logger.info("删除文件成功!"+myFile);
       return "redirect:/files?fId="+folder;
   }

/**
    * @Description 删除文件夹并清空文件
    * @Author xw
    * @Date 15:22 2020/2/12
    * @Param [fId]
    * @return java.lang.String
    **/
   @GetMapping("/deleteFolder")
   public String deleteFolder(@RequestParam Integer fId){
       FileFolder folder = fileFolderService.getFileFolderByFileFolderId(fId);
       //强制删除
       deleteFolderF(folder);
       return folder.getParentFolderId() == 0?"redirect:/files":"redirect:/files?fId="+folder.getParentFolderId();
   }

/**
    * @Description 迭代删除文件夹里面的所有文件和子文件夹
    * @Author xw
    * @Date 9:17 2020/2/29
    * @Param [folder]
    * @return void
    **/
   public void deleteFolderF(FileFolder folder){
       //获得当前文件夹下的所有子文件夹
       List<FileFolder> folders = fileFolderService.getFileFolderByParentFolderId(folder.getFileFolderId());
       //删除当前文件夹的所有的文件
       List<MyFile> files = myFileService.getFilesByParentFolderId(folder.getFileFolderId());
       if (files.size()!=0){
           for (int i = 0; i < files.size(); i++) {
               Integer fileId = files.get(i).getMyFileId();
               boolean b = FtpUtil.deleteFile("/"+files.get(i).getMyFilePath(), files.get(i).getMyFileName() + files.get(i).getPostfix());
               if (b){
                   myFileService.deleteByFileId(fileId);
                   fileStoreService.subSize(folder.getFileStoreId(),Integer.valueOf(files.get(i).getSize()));
               }
           }
       }
       if (folders.size()!=0){
           for (int i = 0; i < folders.size(); i++) {
               deleteFolderF(folders.get(i));
           }
       }
       fileFolderService.deleteFileFolderById(folder.getFileFolderId());
   }

/**
    * @Description 添加文件夹
    * @Author xw
    * @Date 23:16 2020/2/10
    * @Param [folder, map]
    * @return java.lang.String
    **/
   @PostMapping("/addFolder")
   public String addFolder(FileFolder folder,Map<String, Object> map) {
       //设置文件夹信息
       folder.setFileStoreId(loginUser.getFileStoreId());
       folder.setTime(new Date());
       //获得当前目录下的所有文件夹,检查当前文件夹是否已经存在
       List<FileFolder> fileFolders = null;
       if (folder.getParentFolderId() == 0){
           //向用户根目录添加文件夹
           fileFolders = fileFolderService.getRootFoldersByFileStoreId(loginUser.getFileStoreId());
       }else{
           //向用户的其他目录添加文件夹
           fileFolders = fileFolderService.getFileFolderByParentFolderId(folder.getParentFolderId());
       }
       for (int i = 0; i < fileFolders.size(); i++) {
           FileFolder fileFolder = fileFolders.get(i);
           if (fileFolder.getFileFolderName().equals(folder.getFileFolderName())){
               logger.info("添加文件夹失败!文件夹已存在...");
               return "redirect:/files?error=1&fId="+folder.getParentFolderId();
           }
       }
       //向数据库写入数据
       Integer integer = fileFolderService.addFileFolder(folder);
       logger.info("添加文件夹成功!"+folder);
       return "redirect:/files?fId="+folder.getParentFolderId();
   }

/**
    * @Description 重命名文件夹
    * @Author xw
    * @Date 23:18 2020/2/10
    * @Param [folder, map]
    * @return java.lang.String
    **/
   @PostMapping("/updateFolder")
   public String updateFolder(FileFolder folder,Map<String, Object> map) {
       //获得文件夹的数据库信息
       FileFolder fileFolder = fileFolderService.getFileFolderByFileFolderId(folder.getFileFolderId());
       fileFolder.setFileFolderName(folder.getFileFolderName());
       //获得当前目录下的所有文件夹,用于检查文件夹是否已经存在
       List<FileFolder> fileFolders = fileFolderService.getFileFolderByParentFolderId(fileFolder.getParentFolderId());
       for (int i = 0; i < fileFolders.size(); i++) {
           FileFolder folder1 = fileFolders.get(i);
           if (folder1.getFileFolderName().equals(folder.getFileFolderName()) && folder1.getFileFolderId() != folder.getFileFolderId()){
               logger.info("重命名文件夹失败!文件夹已存在...");
               return "redirect:/files?error=2&fId="+fileFolder.getParentFolderId();
           }
       }
       //向数据库写入数据
       Integer integer = fileFolderService.updateFileFolderById(fileFolder);
       logger.info("重命名文件夹成功!"+folder);
       return "redirect:/files?fId="+fileFolder.getParentFolderId();
   }

/**
    * @Description 重命名文件
    * @Author xw
    * @Date 12:47 2020/2/12
    * @Param [file, map]
    * @return java.lang.String
    **/
   @PostMapping("/updateFileName")
   public String updateFileName(MyFile file,Map<String, Object> map) {
       MyFile myFile = myFileService.getFileByFileId(file.getMyFileId());
       if (myFile != null){
           String oldName = myFile.getMyFileName();
           String newName = file.getMyFileName();
           if (!oldName.equals(newName)){
               boolean b = FtpUtil.reNameFile(myFile.getMyFilePath() + "/" + oldName+myFile.getPostfix(), myFile.getMyFilePath() + "/" + newName+myFile.getPostfix());
               if (b){
                   Integer integer = myFileService.updateFile(
                           MyFile.builder().myFileId(myFile.getMyFileId()).myFileName(newName).build());
                   if (integer == 1){
                       logger.info("修改文件名成功!原文件名:"+oldName+"  新文件名:"+newName);
                   }else{
                       logger.error("修改文件名失败!原文件名:"+oldName+"  新文件名:"+newName);
                   }
               }
           }
       }
       return "redirect:/files?fId="+myFile.getParentFolderId();
   }

/**
    * @Description 获得二维码
    * @Author xw
    * @Date 15:20 2020/2/12
    * @Param [id, url]
    * @return java.util.Map<java.lang.String,java.lang.Object>
    **/
   @GetMapping("getQrCode")
   @ResponseBody
   public Map<String,Object> getQrCode(@RequestParam Integer id,@RequestParam String url){
       Map<String,Object> map = new HashMap<>();
       map.put("imgPath","https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2654852821,3851565636&fm=26&gp=0.jpg");
       if (id != null){
           MyFile file = myFileService.getFileByFileId(id);
           if (file != null){
               try {
                   String path = request.getSession().getServletContext().getRealPath("/user_img/");
                   url = url+"/file/share?t="+ UUID.randomUUID().toString().substring(0,10) +"&f="+file.getMyFileId()+"&p="+file.getUploadTime().getTime()+""+file.getSize()+"&flag=1";
                   File targetFile = new File(path, "");
                   if (!targetFile.exists()) {
                       targetFile.mkdirs();
                   }
                   File f = new File(path, id + ".jpg");
                   if (!f.exists()){
                       //文件不存在,开始生成二维码并保存文件
                       OutputStream os = new FileOutputStream(f);
                       QRCodeUtil.encode(url, "/static/img/logo.png", os, true);
                       os.close();
                   }
                   map.put("imgPath","user_img/"+id+".jpg");
                   map.put("url",url);
               } catch (Exception e) {
                   e.printStackTrace();
               }
           }
       }
       return map;
   }

/**
    * @Description 分享文件
    * @Author xw
    * @Date 14:23 2020/2/12
    * @Param [fId]
    * @return void
    **/
   @GetMapping("/file/share")
   public String shareFile(Integer f,String p,String t,Integer flag){
       String fileNameTemp = "";
       String remotePath = "";
       String fileName = "";
       Integer times = 0;
       if (flag == null || f == null || p == null || t == null){
           logger.info("下载分享文件失败,参数错误");
           return "redirect:/error400Page";
       }
       if(flag == 1){
           //获取文件信息
           MyFile myFile = myFileService.getFileByFileId(f);
           if (myFile == null){
               return "redirect:/error404Page";
           }
           String pwd = myFile.getUploadTime().getTime()+""+myFile.getSize();
           if (!pwd.equals(p)){
               return "redirect:/error400Page";
           }
           remotePath = myFile.getMyFilePath();
           fileName = myFile.getMyFileName()+myFile.getPostfix();
       }else if(flag == 2){
           TempFile tempFile = tempFileService.queryById(f);
           if (tempFile == null){
               return "redirect:/error404Page";
           }
           Long test = tempFile.getUploadTime().getTime();

String pwd = tempFile.getSize();
           if (!pwd.equals(p)){
               return "redirect:/error400Page";
           }
           remotePath = tempFile.getFilePath();
           fileName = tempFile.getFileName();
       }else {
           return "redirect:/error400Page";
       }
       fileNameTemp = fileName;
       try {
           //解决下载文件时 中文文件名乱码问题
           boolean isMSIE = isMSBrowser(request);
           if (isMSIE) {
               //IE浏览器的乱码问题解决
               fileNameTemp = URLEncoder.encode(fileNameTemp, "UTF-8");
           } else {
               //万能乱码问题解决
               fileNameTemp = new String(fileNameTemp.getBytes("UTF-8"), "ISO-8859-1");
           }
           //去FTP上拉取
           OutputStream os = new BufferedOutputStream(response.getOutputStream());
           response.setCharacterEncoding("utf-8");
           // 设置返回类型
           response.setContentType("multipart/form-data");
           // 文件名转码一下,不然会出现中文乱码
           response.setHeader("Content-Disposition", "attachment;fileName=" + fileNameTemp);
           if (FtpUtil.downloadFile("/" + remotePath, fileName, os)) {
               myFileService.updateFile(
                       MyFile.builder().myFileId(f).downloadTime(times + 1).build());
               os.flush();
               os.close();
               logger.info("文件下载成功!");
           }
       } catch (Exception e) {
           e.printStackTrace();
       }
       return "success";
   }

/**
    * @Description 根据文件的后缀名获得对应的类型
    * @Author xw
    * @Date 23:20 2020/2/10
    * @Param [type]
    * @return int 1:文本类型   2:图像类型  3:视频类型  4:音乐类型  5:其他类型
    **/
   public int getType(String type){
       if (".chm".equals(type)||".txt".equals(type)||".xmind".equals(type)||".xlsx".equals(type)||".md".equals(type)
               ||".doc".equals(type)||".docx".equals(type)||".pptx".equals(type)
               ||".wps".equals(type)||".word".equals(type)||".html".equals(type)||".pdf".equals(type)){
           return  1;
       }else if (".bmp".equals(type)||".gif".equals(type)||".jpg".equals(type)||".ico".equals(type)||".vsd".equals(type)
               ||".pic".equals(type)||".png".equals(type)||".jepg".equals(type)||".jpeg".equals(type)||".webp".equals(type)
               ||".svg".equals(type)){
           return 2;
       } else if (".avi".equals(type)||".mov".equals(type)||".qt".equals(type)
               ||".asf".equals(type)||".rm".equals(type)||".navi".equals(type)||".wav".equals(type)
               ||".mp4".equals(type)||".mkv".equals(type)||".webm".equals(type)){
           return 3;
       } else if (".mp3".equals(type)||".wma".equals(type)){
           return 4;
       } else {
           return 5;
       }
   }

/**
    * @Description 正则验证文件名是否合法 [汉字,字符,数字,下划线,英文句号,横线]
    * @Author xw
    * @Date 23:22 2020/2/10
    * @Param [target]
    * @return boolean
    **/
   public boolean checkTarget(String target) {
       final String format = "[^\\u4E00-\\u9FA5\\uF900-\\uFA2D\\w-_.]";
       Pattern pattern = Pattern.compile(format);
       Matcher matcher = pattern.matcher(target);
       return !matcher.find();
   }

/**
    * @Description 判断当前浏览器是否为ie
    * @Author xw
    * @Date 22:39 2020/3/5
    * @Param [request]
    * @return boolean
    **/
   public static boolean isMSBrowser(HttpServletRequest request) {
       String[] IEBrowserSignals = {"MSIE", "Trident", "Edge"};
       String userAgent = request.getHeader("User-Agent");
       for (String signal : IEBrowserSignals) {
           if (userAgent.contains(signal)){
               return true;
           }
       }
       return false;
   }

}

登录控制器: 


/**
* @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<String, Object> 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<String, Object> 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(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));
               // 利用获取到的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<String, Object> map) {
       //判断是否包含错误信息
       if (error != null) {
           if (error == 1) {
               map.put("error", "添加失败!当前已存在同名文件夹");
           }
           if (error == 2) {
               map.put("error", "重命名失败!文件夹已存在");
           }
       }
       //包含的子文件夹
       List<FileFolder> folders = null;
       //包含的文件
       List<MyFile> files = null;
       //当前文件夹信息
       FileFolder nowFolder = null;
       //当前文件夹的相对路径
       List<FileFolder> 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<String, Object> map) {
       //包含的子文件夹
       List<FileFolder> folders = null;
       //当前文件夹信息
       FileFolder nowFolder = null;
       //当前文件夹的相对路径
       List<FileFolder> 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<String, Object> map) {
       List<MyFile> 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<String, Object> map) {
       List<MyFile> 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<String, Object> map) {
       List<MyFile> 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<String, Object> map) {
       List<MyFile> 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<String, Object> map) {
       List<MyFile> files = myFileService.getFilesByType(loginUser.getFileStoreId(),5);
       //获得统计信息
       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/other-files";
   }

/**
    * @Description 登录之后的用户主页
    * @Author xw
    * @Date 10:28 2020/2/26
    * @Param [map]
    * @return java.lang.String
    **/
   @GetMapping("/index")
   public String index(Map<String, Object> 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<String, Object> map) {
       //获得统计信息
       FileStoreStatistics statistics = myFileService.getCountStatistics(loginUser.getFileStoreId());
       map.put("statistics", statistics);
       return "u-admin/help";
   }
}

来源:https://blog.csdn.net/pastclouds/article/details/122054510

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com