Java项目:在线网盘系统(java+JSP+Springboot+maven+mysql+ThymeLeaf+FTP)——计算机毕设

本文介绍了一个基于Java、Springboot、JSP和MySQL的在线网盘系统,实现了用户注册、登录、上传、下载、管理文件和文件夹、分享文件等功能。系统还涉及验证码验证、文件的临时存储、数据库操作以及FTP服务器的使用。
摘要由CSDN通过智能技术生成

一、项目简述

功能:用户的邮箱注册、验证码验证以及用户登录。
不需要注册账号,也可以上传满足条件的临时文件,但是只4小时内有效。
文件的管理,上传、下载、重命名、删除、查看统计数据、分类管理等。
文件夹的管理,创建、删除、重命名。
文件的分享,支持通过链接和二维码的分享方式等等,以及管理员对用户的管理等等。
二、项目运行
环境配置:
Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)

项目技术:
JSP +Springboot+ SpringMVC + MyBatis + ThymeLeaf + FTP+ JavaScript + JQuery + Ajax + maven等等
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
文件仓库控制器:
/**

  • @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 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
    • @Dat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值