前端大文件分片上传详解 - Spring Boot 后端接口实现

133 阅读2分钟

一、分片上传核心流程

  1. 前端分片处理

    • 计算文件MD5值作为唯一标识‌12
    • 按固定大小(如5MB)切割文件为Blob分片
    • 记录分片序号和总分片数
  2. 后端关键接口设计

    javaCopy Code
    // 分片上传接口
    @PostMapping("/upload/chunk")
    public ResponseEntity<ChunkResult> uploadChunk(
        @RequestParam String fileMd5,
        @RequestParam Integer chunkIndex,
        @RequestParam MultipartFile chunk) {
      // 存储分片到临时目录
      // 更新分片记录状态
    }
    
    // 合并分片接口
    @PostMapping("/merge")
    public ResponseEntity<String> mergeChunks(
        @RequestParam String fileMd5, 
        @RequestParam String fileName) {
      // 校验所有分片完整性
      // 合并为完整文件
    }
    
  3. 断点续传实现

    • 服务端维护fileMd5.conf文件记录分片上传状态‌3
    • 每次上传前检查已传分片,跳过已完成部分‌23

二、Spring Boot后端实现

FileController.java

已完成

该控制器包含文件检查接口,实现秒传和断点续传的初始校验‌12。

ChunkService.java

已完成

服务层处理分片存储和合并逻辑,使用NIO提升大文件操作性能‌34。

**


三、前端关键技术实现

  1. 文件分片计算

    javascriptCopy Code
    const chunkSize = 5 * 1024 * 1024; // 5MB
    const chunks = Math.ceil(file.size / chunkSize);
    const fileReader = new FileReader();
    
    fileReader.onload = function(e) {
      const chunk = file.slice(offset, offset + chunkSize);
      uploadChunk(chunk, currentChunk, chunks);
    };
    
  2. 并发控制

    javascriptCopy Code
    // 限制同时上传3个分片
    const MAX_CONCURRENT = 3;
    let uploading = 0;
    
    function uploadNext() {
      while(uploading 1005[2][5[2][5[3[1< MAX_CONCURRENT && hasMoreChunks()) {
        uploadChunk(...);
        uploading++;
      }
    }
    
  3. 进度计算

    javascriptCopy Code
    const progress = (uploadedChunks / totalChunks) * ;
    

四、高级优化方案

  1. 秒传实现

    • 上传前先发送文件MD到/api/file/check
    • 若服务器存在相同MD5文件,直接返回成功]
  2. 分布式存储集成

    javaCopy Code
    // MinIO集成示例
    @Service
    public class MinioService {
        public void uploadToMinio(Path file) {
            minioClient.putObject(
                PutObjectArgs.builder()
                    .bucket("uploads")
                    .object(file.getFileName().toString())
                    .build());
        }
    }
    

    结合对象存储服务处理海量文件]

  3. 断点续传增强