## 高新通文件中间件服务 ### 功能清单 * 支持多文件、大文件拆分上传 * 支持已存在文件急速上传 * 支持文件断点续传 * 文件下载 * 文件过期机制 * 支持对象存储服务组件的扩展 * 图片资源支持缩略图 ## 接口定义 ### 1.文件上传接口 * 请求URL:`api/v1/files` * 请求方法: `POST` * 请求参数: `form-data` #### header参数 _header参数可以不传,特殊需求下可以使用_ |参数|类型|说明| |---|---|---| |FILE-EXPIRE|数字|文件过期时间,如果为空则按服务配置中的默认过期时间(300秒), -1为不过期| |FILE-HASH|字符串|文件hash值,如文件的md5| #### 请求form-data参数 |参数|类型|说明| |---|---|---| |base_url|字符串|基本路径,对象桶的名称| |form_key|字符串|form-data中的文件键值,如**data**| |**data**|字符串|同form_key中配置的值| ### 2.请求文件 _对于文件的请求分两种情况,一种是直接显示文件,如图片、视频、pdf等, 一种下返回文件的二进制流(content-type:application/octet-stream), 前者的content-type是根据文件的类型返回的,后者固定为application/octet-stream,对于浏览器无法解析的content-type,会直接下载_ #### 2.1 打开文件(pdf\图片\视频) * 请求URL: `文件的url` * 请求方法: `GET` * 请求参数: `见下方` #### 缩略图参数说明 _在请求的url中拼接如下参数_ `?thumb=1&w=100&h=100` `thumb`: 为1则说明开启缩略图模式 `w`: 缩略图宽度,数字 `h`: 缩略图高度,数字 #### 2.2 下载文件(返回文件的二进制流) * 请求URL: `api/v1/files` * 请求方法: `GET` * 请求参数: |参数|类型|说明| |---|---|---| |path|字符串|文件路径| |name|字符串|要下载的文件名| #### 2.3 文件本地化 _默认文件上传后为临时文件,不调用本地化则会过期删除(设置FILE-EXPIRE为-1的情况除外)_ * 请求URL: `/api/v1/files/persistent` * 请求方法: `PUT` * 请求参数: `JSON Body` |参数|类型|说明| |---|---|----| |hash|字符串|文件的hash值| ### 3.文件分块上传 * 请求URL: `/api/v1/files/chunk` * 请求方法: `POST` * 请求参数: `form-data` |参数|类型|是否必填|说明| |---|---|-----|---| |base_url|字符串|Y|基本路径,对象桶的名称| |form_key|字符串|Y|form-data中的文件键值,如**data**| |**data**|字符串|Y|同form_key中配置的值| |index|数字|Y|当前文件块的索引,从1开始| |total|数字|Y|当前文件总块数| |hash|字符串|Y|目标文件的md5,非文件块md5| ## 用到的服务组件 ### MYSQL 存储平台已经上传的文件信息,实现文件极速秒传 _上传文件时,把文件的文件名,大小,路径写入file_history表中,如果文件是默认过期的,设置is_persistent字段为2(非持久),反之设置为1(持久),服务初始化时可以检测扫描此字段的值和 数据创建时间是否大于过期时间实现统一删除,这样可以处理防止服务重启时收不到部分文件过期消息的情况_ ### REDIS 储存临时上传的文件hash,并做key过期消息发布。