mirror of
https://github.com/keven1024/015.git
synced 2026-05-26 07:08:02 +00:00
68 lines
1.7 KiB
Go
68 lines
1.7 KiB
Go
package models
|
|
|
|
import (
|
|
"encoding/json"
|
|
"pkg/utils"
|
|
|
|
"github.com/redis/rueidis"
|
|
)
|
|
|
|
type FileInfo struct {
|
|
FileSize int64 `json:"size"`
|
|
MimeType string `json:"mime_type"`
|
|
FileHash string `json:"hash"`
|
|
ChunkSize int64 `json:"chunk_size"`
|
|
}
|
|
|
|
type FileType string
|
|
|
|
const (
|
|
FileTypeInit FileType = "init"
|
|
FileTypeUpload FileType = "already"
|
|
)
|
|
|
|
type RedisFileInfo struct {
|
|
FileInfo
|
|
FileType FileType `json:"type"`
|
|
CreatedAt int64 `json:"created_at"`
|
|
Expire int64 `json:"expire"` // 只有上传文件(init)的时候有这个字段
|
|
}
|
|
|
|
func GetRedisFileInfo(fileId string) (*RedisFileInfo, error) {
|
|
rdb, ctx := utils.GetRedisClient()
|
|
fileInfoUnmarshalData, err := rdb.Do(ctx, rdb.B().Hget().Key("015:fileInfoMap").Field(fileId).Build()).ToString()
|
|
if rueidis.IsRedisNil(err) {
|
|
return nil, nil
|
|
}
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var fileInfoData RedisFileInfo
|
|
if err := json.Unmarshal([]byte(fileInfoUnmarshalData), &fileInfoData); err != nil {
|
|
return nil, err
|
|
}
|
|
return &fileInfoData, nil
|
|
}
|
|
|
|
func SetRedisFileInfo(fileId string, handler func(fileInfo *RedisFileInfo) *RedisFileInfo) error {
|
|
rdb, ctx := utils.GetRedisClient()
|
|
old_fileInfo, err := GetRedisFileInfo(fileId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if old_fileInfo == nil {
|
|
old_fileInfo = &RedisFileInfo{}
|
|
}
|
|
fileInfo := handler(old_fileInfo)
|
|
jsonData, err := json.Marshal(fileInfo)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return rdb.Do(ctx, rdb.B().Hset().Key("015:fileInfoMap").FieldValue().FieldValue(fileId, string(jsonData)).Build()).Error()
|
|
}
|
|
|
|
func GetRedisFileInfoAll() (map[string]string, error) {
|
|
rdb, ctx := utils.GetRedisClient()
|
|
return rdb.Do(ctx, rdb.B().Hgetall().Key("015:fileInfoMap").Build()).AsStrMap()
|
|
}
|