# 简易文件服务器 **Repository Path**: zhh567/storage ## Basic Information - **Project Name**: 简易文件服务器 - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-14 - **Last Updated**: 2021-06-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 简易文件服务器 ## 说明 简易文件服务器,文件的上传下载。 ## Server 端 提供文件上传与下载的web服务,文件存储目录在 `application.yml` 文件中配置。根据创建时间的年月日选择存储目录,使用 uuid 作为存储文件名。在数据库中保存元数据,包括:uuid、原文件名、文件大小、创建时间。其中原文件名进行了 url 编码以保证数据库安全。 ### 技术栈 1. spring boot 2. mybatis 3. mysql ### 快速启动 1. 配置环境 1. MySQL 2. JDK 1.8 及以上 3. Maven 2. 导入数据库文件 `MetaData.sql` 3. 先启动 server 服务 4. 执行 client SDK 中的测试。当前目录下名为 `123测试.txt` 的文件将上传到服务器,获得 uuid 后再查询文件元数据并判断文件名、文件大小是否相同。最后下载文件并计算其哈希值,再与原文件哈希值对比。 ### http 接口 1. 上传文件 ```http POST / ``` 请求参数 | 属性 | 类型 | 必填 | 说明 | | ---- | ------------------- | ---- | ------------ | | file | multipart/form-data | 是 | 要上传的文件 | 返回值 | 属性 | 类型 | 说明 | | ---- | ------ | ------------------------ | | uuid | string | 为上传的文件生成的唯一id | 状态码 | 状态码 | 说明 | | ------ | -------------------------- | | 200 | 上传成功 | | 400 | 上传文件失败,文件不能为空 | | 500 | 服务器出错 | 2. 下载文件 ```http GET / ``` 请求参数 | 属性 | 类型 | 必填 | 说明 | | ---- | ------ | ---- | --------------- | | uuid | string | 是 | 下载文件的 uuid | 返回值 | 属性 | 类型 | 说明 | | ---- | ------------------- | ------------ | | file | multipart/form-data | 下载的文件流 | 状态码 | 状态码 | 说明 | | ------ | -------------------- | | 200 | 下载成功 | | 410 | 文件不存在 | | 500 | 服务端错误或文件丢失 | 3. 查询接口 ```http GET /info/ ``` 请求参数 | 属性 | 类型 | 必填 | 说明 | | ---- | ------ | ---- | --------------- | | uuid | string | 是 | 目标文件的 uuid | 返回值 | 属性 | 类型 | 说明 | | ---------- | ------ | ------------------ | | fileUuid | string | 查询文件的 uuid | | fileName | string | 文件的原始名称 | | size | int | 文件大小,单位字节 | | createTime | int | 文件上传时的时间戳 | > 返回值实例 > > ```json > { > "fileUuid": "797d9860996e49b3820144fbdf25789a", > "fileName": "123测试.txt", > "size": 25, > "createTime": 1618378181146 > } > ``` > > 状态码 | 状态码 | 说明 | | ------ | -------------------- | | 200 | 查询成功 | | 410 | 文件不存在 | | 500 | 服务端错误或文件丢失 | ### 元数据存储结构 | Field | Field | Null | Key | Default | Extra | | ---------- | ----------- | ---- | ---- | ------- | -------------- | | id | int | NO | PRI | NULL | auto_increment | | fileUuid | char(64) | NO | UNI | NULL | | | fileName | varchar(50) | NO | | NULL | | | size | bigint | NO | | NULL | | | createTime | bigint | NO | | NULL | | ## Client SDK 一个可以访问 server 端接口的库 ### 工具与依赖 1. Maven 2. junit 3. jackson ### api 1. 上传接口 ```java String upload(File file) throws IOException ``` 参数 | 属性 | 类型 | 必填 | 说明 | | ---- | ---- | ---- | -------- | | file | File | 是 | 文件对象 | 返回值 | 属性 | 类型 | 说明 | | ---- | ------ | ----------------- | | uuid | string | 为文件生成的 uuid | 错误 | 错误 | 说明 | | ----------- | -------------------------- | | IOException | 发生了网络错误,或上传出错 | 2. 下载接口 ```java InputStream download(String uuid) throws IOException ``` 参数 | 属性 | 类型 | 必填 | 说明 | | ---- | ------ | ---- | --------------- | | uuid | string | 是 | 目标文件的 uuid | 返回值 | 属性 | 类型 | 说明 | | ----------- | ----------- | ------------ | | inputStream | InputStream | 文件的输入流 | 错误 | 错误 | 说明 | | ----------- | -------------------------- | | IOException | 发生了网络错误,或下载出错 | 3. 查询接口 ```java MetaData getInfo(String uuid) throws IOException ``` 参数 | 属性 | 类型 | 必填 | 说明 | | ---- | ------ | ---- | --------------- | | uuid | string | 是 | 目标文件的 uuid | 返回值 | 属性 | 类型 | 说明 | | -------- | ----------- | -------------------- | | metaData | java Object | 文件原数据的描述对象 | 错误 | 错误 | 说明 | | ----------- | -------------------------- | | IOException | 发生了网络错误,或查询出错 |