Java Spring Boot+vue3文件管理系统

前言

面试的时候老是被问,大文件上传逻辑,所以花了一天的时间实现了这个功能,登录+jwt认证+普通文件上传+大型文件上传

开始

演示效果

架构流程

复制代码
1. 不能直接file.arrayBuffer()读取文件信息 使用slice Blob进行切片,得到chunks数组 合并所有块的数据内容,增量计算哈希[不会累积内存],得到文件的id【为秒传做准备,和文件做唯一性】 

2. 准备工作完成,可以开始上传

3. 
3-1.先请求秒传接口,查询文件是否在服务器存在

3-2.初始化分片上传接口
   - 是否已有上传记录【查redis】,得到上传id,分片大小,已上传分片 {id:xxx, size:121, chunk: [1,2,3,4]}

3-3.上传分片
   - 查询已上传分片[跳过]
   - 请求分片接口, 获取上传信息[redis]
   - 保存分片文件【根据 uploadId 创建临时分片目录,然后把当前上传的 chunk 保存到对应文件】
    temp
    └── a8f93c9d7e2b4f5a8c9d123456789abc 
       ├── 0.chunk 
       ├── 1.chunk 
       ├── 2.chunk 
    更新redis已上传分片

上传完分片就自动执行下面
3-4.合并文件
    - 请求合并文件接口
        - 先获取上传信息 检查秒传【查询服务器是否存在】
        - 合并文件[创建目录,合并分片,进库,删除临时分片]

              用户选择文件
                    |
                    v
          File对象(不读取全部内容)
                    |
                    v
        Blob.slice 文件切片
                    |
                    v
        增量计算文件Hash(MD5/SHA256)
                    |
                    v
              fileId
                    |
        +-----------+------------+
        |                        |
        v                        v
    秒传检查                初始化上传
        |                        |
 已存在直接返回          创建uploadId
        |                        |
        v                        v
       完成                  上传分片
                                  |
                                  v
                         查询已上传chunk
                                  |
                          跳过已经上传
                                  |
                                  v
                         上传当前chunk
                                  |
                                  v
                         Redis记录状态
                                  |
                                  v
                         全部分片完成
                                  |
                                  v
                         请求合并文件
                                  |
                                  v
                    合并 -> 入库 -> 删除临时文件

项目地址

相关推荐
CoderYanger2 小时前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第二弹)
java·数据库·spring boot·spring·面试·java-ee·mybatis
CQU_JIAKE5 小时前
11.7[高体】
java·后端·spring
apcipot_rain6 小时前
C++转Java日记(04)
java·开发语言·c++
特立独行的猫A6 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢
java·后端·python
云和数据.ChenGuang7 小时前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
憧憬成为java架构高手的小白8 小时前
LangGraph4j 实战(下)
java
天诰8 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
蜗牛一步步往上爬10 小时前
第十六章 C++语言在深度学习中的应用
开发语言·c++·深度学习
这个昵称不容易12 小时前
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
java·springboot·毕设
计算机毕设定制辅导-无忧学长12 小时前
《基于微信小程序的居家医疗陪护预约系统设计与实现》
java·spring boot·微信小程序·uniapp·居家医疗陪护预约系统