云存储项目
1.项目背景
1.1 云存储概述
云存储是一种网上在线存储(Cloud storage),即把数据存放在通常由第三方托管的多台虚拟服务器,而非专属的服务器上。客户便可自行使用此存储资源池来存放文件或对象。
实际上,这些资源可能被分布在众多的服务器主机上。
云存储的类型
个人云存储
私有云存储
公有云存储
混合云存储
他们都在使用云存储
为什么要使用云存储
- 数据转移方便
- 高可靠性
- 高安全性
- 可扩展性
云存储已经成为未来存储发展的一种趋势。
随着5G网络推广、大数据时代下用户体验的大幅提升、云存储市场前景广阔。
1.2 项目基础架构
1.3 项目预备环境
- JDK、Java IDE
- MySQL&MySQL Client
- Tomcat
- Linux
1.4 项目收获
通过本次项目,你将会有如下收获
- 了解到云存储相关概念
- 掌握企业中文件的常规操作
- 掌握企业中文件的秒传方法
- 掌握企业中文件的分块上传与断点续传
- 构建企业级分布式文件系统
- 了解微服务相关概念
- 巩固Java基础
2.项目实战
2.1 简单文件上传服务
接口列表
| 接口描述 | 接口URL |
|---|---|
| 文件上传接口 | POST /file/upload |
| 文件下载接口 | GET /file/download |
| 文件查询接口 | GET /file/query |
| 文件删除接口 | POST /file/delete |
文件表设计
1 | CREATE TABLE `t_file` ( |
2.2 用户管理服务
接口列表
| 接口描述 | 接口URL |
|---|---|
| 用户查询接口 | /user/query |
| 用户创建接口 | /user/create |
| 用户编辑接口 | /user/update |
| 用户删除接口 | /user/${id}/delete |
| 登录验证接口 | /user/login |
| 密码重置接口 | /user/pwd/reset |
用户表设计
1 | CREATE TABLE `baidu_cloud`.`t_user` ( |
2.3 用户文件关联
用户文件表设计
1 | CREATE TABLE `baidu_cloud`.`t_user_file` ( |
用户与文件关系设计概要
2.4 文件秒传
原理概述

2.5 文件分片上传
原理概述

2.6 断点续传
Http请求头Range
http请求头中的Range属性用于请求资源的部分内容,单位是byte,从0开始
如果服务器能够正常响应的话,服务器会返回 206 Partial Content 的状态码及说明
如果不能处理这种Range的话,就会返回整个资源以及响应状态码为 200 OK
例如
请求
1 | GET /test.rar HTTP/1.1 |
表示请求test.rar的头500个字节:bytes=0-499
响应
1 | 206 OK |
响应头说明
1 | Content-Range: bytes 0-10/3103 |
表示,服务器响应了前(0-10)个字节的数据,该资源一共有(3103)个字节大小
1 | Content-Length: 801 |
表示这次服务器响应了11个字节的数据(0-10)
简单实现代码
1 | File file = new File("C:\\Users\\MAX\\Desktop\\CentOS-7-x86_64-Minimal-1511.iso"); |
redis分块上传实现
前端html代码
1 | <body> |
前端js代码
1 | <script src="${pageContext.request.contextPath}/js/jquery.min.js"></script> |
1 | <script> |
后台java实现
file/info接口
1 |
|
file/info service层
1 | public boolean saveFileInfoToRedis(String fileName, |
file/patchUpload接口
1 |
|
file/patchUpload service层
1 | public boolean savePatchFileBlock(Part part,String savePath, String fileName, String fileHash, String chunkNum) { |
FileUtil工具类
1 | public class FileUtil { |