文件服务

liuxiulin d5e5f70cb1 first commit 2 år sedan
.idea d5e5f70cb1 first commit 2 år sedan
app d5e5f70cb1 first commit 2 år sedan
boot d5e5f70cb1 first commit 2 år sedan
config d5e5f70cb1 first commit 2 år sedan
gxt-file-server_package d5e5f70cb1 first commit 2 år sedan
pkg d5e5f70cb1 first commit 2 år sedan
router d5e5f70cb1 first commit 2 år sedan
.gitignore d5e5f70cb1 first commit 2 år sedan
README.md d5e5f70cb1 first commit 2 år sedan
go.mod d5e5f70cb1 first commit 2 år sedan
go.sum d5e5f70cb1 first commit 2 år sedan
main.go d5e5f70cb1 first commit 2 år sedan
发开发.sh d5e5f70cb1 first commit 2 år sedan

README.md

高新通文件中间件服务

功能清单

  • 支持多文件、大文件拆分上传
  • 支持已存在文件急速上传
  • 支持文件断点续传
  • 文件下载
  • 文件过期机制
  • 支持对象存储服务组件的扩展
  • 图片资源支持缩略图

接口定义

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表中,如果文件是默认过期的,设置ispersistent字段为2(非持久),反之设置为1(持久),服务初始化时可以检测扫描此字段的值和 数据创建时间是否大于过期时间实现统一删除,这样可以处理防止服务重启时收不到部分文件过期消息的情况

REDIS

储存临时上传的文件hash,并做key过期消息发布。