Java项目:在线网盘文件分享系统(java+springboot+freemark+jpa+MySQL+maven)

springboot+freemark+jpa+MySQL实现的在线网盘文件分享系统,其功能跟百度网盘非常类似,普通用户可以注册登录,注册后默认分配1G的空间大小,登录进去后可以新建文件夹、上传各种类型的文件、文件移动、复制、下载、删除、分享,分享分为私密分享和公开分享,还可以设置分享过期时间,打开分享链接后可以对文件进行查看、下载、保存到自己网盘等。超级管理员登录后可以设置普通用户的空间大小、角色类型、权限等。

本系统主要涉及的特色功能有:

1:系统在上传文件时自动计算文件的md5值,并且检查该值是否存在,若存在则文件不再上传到服务器,直接进行引用原有的文件。

2:定时器定时检查限时分享的文件是否过期。

3:网盘目录结构可无限制层级创建,保存移动复制文件时递归所选文件夹层级等等。

使用技术:java+springboot+freemark+jpa+MySQL+maven
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
管理员控制器:
/**

  • @ClassName: AdminController

  • @Description: 管理员控制器
    **/
    @Controller
    public class AdminController extends BaseController {
    private Logger logger = LogUtils.getInstance(AdminController.class);

    /**

    • @Description 前往用户管理页面
      **/
      @GetMapping("/manages-users")
      public String manageUsers(Map<String,Object> map,Integer cur){
      if (loginUser.getRole() == 1){
      //用于无访问权限
      logger.error(“当前登录用户:”+loginUser.getUserName()+“无管理员权限!”);
      return “redirect:/error401Page”;
      }
      //获取全部的用户
      Integer usersCount = userService.getUsersCount();
      //获取当前查询的页数,如果为空,默认为0
      cur = (cur == null || cur<0)?0:cur;
      //获得统计信息
      FileStoreStatistics statistics = myFileService.getCountStatistics(loginUser.getFileStoreId());
      //分页获得20个用户信息
      Page page = PageHelper.startPage(cur, 20);
      List users = userService.getUsers();
      map.put(“statistics”, statistics);
      map.put(“users”, users);
      map.put(“page”, page);
      map.put(“usersCount”, usersCount);
      logger.info(“用户管理域的内容:”+map);
      return “admin/manage-users”;
      }

    /**

    • @Description 修改用户的权限和最大容量
      **/
      @GetMapping("/updateStoreInfo")
      @ResponseBody
      public String updateStoreInfo(Integer uId,Integer pre,Integer size){
      Integer integer = fileStoreService.updatePermission(uId, pre, size*1024);
      if (integer == 1) {
      //更新成功,返回200状态码
      logger.info(“修改用户”+userService.queryById(uId).getUserName()+":的权限和仓库大小成功!");
      return “200”;
      }else {
      //更新失败,返回500状态码
      logger.error(“修改用户”+userService.queryById(uId).getUserName()+":的权限和仓库大小失败!");
      return “500”;
      }
      }

    /**

    • @Description 删除用户
      **/
      @GetMapping("/deleteUser")
      public String deleteUser(Integer uId,Integer cur){
      cur = (cur == null || cur < 0)?1:cur;
      User user = userService.queryById(uId);
      FileStore fileStore = fileStoreService.getFileStoreByUserId(uId);
      List folders = fileFolderService.getRootFoldersByFileStoreId(fileStore.getFileStoreId());
      //迭代删除文件夹
      for (FileFolder f:folders) {
      deleteFolderF(f);
      }
      List files = myFileService.getRootFilesByFileStoreId(fileStore.getFileStoreId());
      //删除该用户仓库根目录下的所有文件
      for (MyFile f:files) {
      String remotePath = f.getMyFilePath();
      String fileName = f.getMyFileName()+f.getPostfix();
      //从FTP文件服务器上删除文件
      boolean b = FtpUtil.deleteFile("/"+remotePath, fileName);
      if (b){
      //删除成功,返回空间
      fileStoreService.subSize(f.getFileStoreId(),Integer.valueOf(f.getSize()));
      //删除文件表对应的数据
      myFileService.deleteByFileId(f.getMyFileId());
      }
      logger.info(“删除文件成功!”+f);
      }
      if (FtpUtil.deleteFolder("/" + uId)){
      logger.info(“清空FTP上该用户的文件成功”);
      }else {
      logger.error(“清空FTP上该用户的文件失败”);
      }
      userService.deleteById(uId);
      fileStoreService.deleteById(fileStore.getFileStoreId());
      return “redirect:/manages-users?cur=”+cur;
      }

    /**

    • @Description 迭代删除文件夹里面的所有文件和子文件夹
      /
      public void deleteFolderF(FileFolder folder){
      //获得当前文件夹下的所有子文件夹
      List folders = fileFolderService.getFileFolderByParentFolderId(folder.getFileFolderId());
      //删除当前文件夹的所有的文件
      List 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());
      }
      }
      文件仓库控制器:
      /
  • @ClassName: FileStoreController

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

    /**

    • @Description 上传临时文件
      **/
      @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();
      }
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值