https://github.com/hwholiday/file_storage
文件服务器可分片,断点续传等
https://github.com/hwholiday/file_storage
file-slice file-upload filesystem
Last synced: 7 months ago
JSON representation
文件服务器可分片,断点续传等
- Host: GitHub
- URL: https://github.com/hwholiday/file_storage
- Owner: hwholiday
- License: apache-2.0
- Created: 2020-07-13T06:10:56.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-08-17T01:05:45.000Z (about 5 years ago)
- Last Synced: 2025-03-18T17:24:49.345Z (7 months ago)
- Topics: file-slice, file-upload, filesystem
- Language: Go
- Homepage:
- Size: 7.06 MB
- Stars: 20
- Watchers: 2
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# file_storage
参照 Telegram [Uploading and Downloading Files](https://core.telegram.org/api/files)
写的文件服务器(断点续传,分片上传下载,自动生成缩略图等)申请上传文件
---
请求
- 文件名
- 文件大小 (字节)
- 文件扩展名
- 是否需要缩略图
- 文件MD5返回
- 文件id
- 上传过期时间,到时间未上传完,自动清理取消上传文件
---
请求
- 文件ID
返回
- 成功 or 失败
获取文件信息
---
请求
- 文件ID
返回
- 文件信息
上传文件
---
请求- 文件ID
- 文件分片ID file_part
- 文件MD5
- 文件内容 part_size
- 是否是最后一片
###### 所有分片必须具有相同的大小(part_size),并且必须满足以下条件:part_size % 1024 = 0 (可被1KB整除524288 % part_size = 0(512KB必须可以被part_size整除)如果最后一部分的大小小于part_size,则不必满足这些条件。每个部分都应具有序列号file_part,其值的范围为1到3000。服务器处理
- 每个分片接收完毕的时候都检查下服务器接受文件MD5是否相等
- 检查该分片是否已经上传,是则不做任何处理,不是则把文件存入内存,再将已上传文件大小累加
- 判断已上传文件大小是否等于文件总大小 (标记文件已经完成)
- 按照文件分片顺序拼接文件
- 检查文件MD5是否相等,上传到文件服务器,文件上传结束返回
- 成功 or 失败下载文件
---
请求
- 文件ID
- limit 可被1024整除
- offset 可被1024整除
- offset 不能超过 1048576(1 MB)服务器处理
- minio GetObject 可配置
```
var opt minio.GetObjectOptions
err := opt.SetRange(start, end)
GetObject(bucketName, fileName, opt)
```返回
- 文件信息
## 对外方法
```bash
//申请上传文件ID
ApplyFid(info *storage.InApplyFid) (out *storage.OutApplyFid, err error)
//通过文件MD5获取服务器文件信息
GetPbFileInfoByMd5(md5 string) (fileInfo *storage.FileInfo, err error)
//通过文件ID获取服务器文件信息
GetPbFileInfoByFid(fid int64) (fileInfo *storage.FileInfo, err error)
//上传分片文件
UpSliceFile(in *storage.InUpSliceFileItem) (err error)
//分片下载文件
DownSliceFile(in *storage.InDownSliceFileItem) (out *storage.OutDownSliceFileItem, err error)
//上传不分片文件
UpFile(in *storage.InUpFile) (err error)
//下载不分片文件
GetFile(fid int64) (out *storage.OutDownFile, err error)
//取消上传
CancelByFid(info *storage.InCancelUpload) (err error)
```