# java-file-upload-download **Repository Path**: ninuxGithub/java-file-upload-download ## Basic Information - **Project Name**: java-file-upload-download - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-28 - **Last Updated**: 2025-06-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java文件断点续传系统 这是一个基于Spring Boot的文件断点续传系统,支持大文件分片上传、断点续传、秒传以及断点下载等功能。 ## 功能特点 - 文件分片上传:将大文件分割成小块进行上传,减少单次上传的数据量 - 断点续传上传:支持上传中断后,从已上传的部分继续上传,无需重新上传整个文件 - 断点续传下载:支持下载中断后,从已下载的部分继续下载,无需重新下载整个文件 - 上传/下载进度显示:实时显示文件上传/下载进度 - 文件秒传:检测文件是否已存在,避免重复上传 - 文件合并:所有分片上传完成后,自动合并为完整文件 - 错误重试:上传/下载失败时自动重试,提高成功率 ## 技术栈 - 后端:Spring Boot 2.7.5 - 前端:原生JavaScript + HTML + CSS - 文件处理:Java NIO + Commons IO ## 系统架构 1. 前端: - 文件分片:使用Blob.slice()方法将文件分割成小块 - 上传/下载控制:支持暂停/继续上传/下载 - 进度显示:实时显示上传/下载进度 2. 后端: - 分片接收:接收并存储文件分片 - 分片检查:检查分片是否已上传 - 文件合并:使用NIO高效合并文件分片 - 范围请求:支持HTTP Range请求,实现断点下载 ## 快速开始 ### 环境要求 - JDK 11+ - Maven 3.6+ ### 构建项目 ```bash mvn clean package ``` ### 运行项目 ```bash java -jar target/resumable-file-upload-1.0-SNAPSHOT.jar ``` ### 访问系统 打开浏览器访问:http://localhost:8080 ## API接口 ### 上传相关API #### 1. 检查分片是否存在 ``` GET /api/upload/chunk?identifier={identifier}&chunkNumber={chunkNumber} ``` - 参数: - identifier: 文件唯一标识 - chunkNumber: 分片编号 - 响应: - 200: 分片已存在 - 404: 分片不存在 #### 2. 上传分片 ``` POST /api/upload/chunk ``` - 参数: - file: 文件分片数据 - chunkNumber: 分片编号 - chunkSize: 分片大小 - currentChunkSize: 当前分片大小 - totalSize: 文件总大小 - identifier: 文件唯一标识 - filename: 文件名 - relativePath: 相对路径 - 响应: ```json { "code": 200, "message": "操作成功", "data": { "chunkNumber": 0, "success": true } } ``` #### 3. 合并分片 ``` POST /api/upload/merge ``` - 参数: - identifier: 文件唯一标识 - filename: 文件名 - totalChunks: 总分片数 - 响应: ```json { "code": 200, "message": "文件合并成功", "data": { "filePath": "./uploads/files/example.mp4" } } ``` #### 4. 检查文件是否存在 ``` GET /api/upload/file?identifier={identifier}&filename={filename} ``` - 参数: - identifier: 文件唯一标识 - filename: 文件名 - 响应: - 200: 文件已存在 - 404: 文件不存在 ### 下载相关API #### 1. 获取文件列表 ``` GET /api/download/files ``` - 响应: ```json { "code": 200, "message": "操作成功", "data": [ { "filename": "example.mp4", "fileSize": 15728640, "chunkSize": 1048576, "totalChunks": 15, "filePath": "./uploads/files/example.mp4" } ] } ``` #### 2. 获取文件信息 ``` GET /api/download/file/{filename} ``` - 参数: - filename: 文件名 - 响应: ```json { "code": 200, "message": "操作成功", "data": { "filename": "example.mp4", "fileSize": 15728640, "chunkSize": 1048576, "totalChunks": 15, "filePath": "./uploads/files/example.mp4" } } ``` #### 3. 下载文件(支持断点续传) ``` GET /api/download/file/{filename}/download ``` - 参数: - filename: 文件名 - Range (请求头): bytes=start-end - 响应: - 200: 完整文件下载 - 206: 部分内容(断点续传) ## 配置说明 在`application.properties`中可以配置以下参数: ```properties # 服务器端口 server.port=8080 # 文件上传配置 spring.servlet.multipart.enabled=true spring.servlet.multipart.max-file-size=10GB spring.servlet.multipart.max-request-size=10GB # 临时文件存储路径 file.upload.temp-dir=./uploads/temp # 完成文件存储路径 file.upload.dir=./uploads/files # 分片大小(字节) file.upload.chunk-size=1048576 ``` ## 注意事项 1. 大文件上传下载需要调整服务器配置,包括超时时间和最大请求大小 2. 生产环境中应考虑使用专业的文件存储系统,如对象存储服务 3. 文件标识生成策略可以根据需要调整,如使用MD5等 4. 断点下载功能依赖于HTTP的Range请求头,确保服务器支持此功能 ## 许可证 MIT