mirror of
				https://github.com/cloudreve/cloudreve.git
				synced 2025-11-01 00:57:15 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package serializer
 | ||
| 
 | ||
| import (
 | ||
| 	"encoding/base64"
 | ||
| 	"encoding/gob"
 | ||
| 	"encoding/json"
 | ||
| 	model "github.com/cloudreve/Cloudreve/v3/models"
 | ||
| 	"time"
 | ||
| )
 | ||
| 
 | ||
| // UploadPolicy slave模式下传递的上传策略
 | ||
| type UploadPolicy struct {
 | ||
| 	SavePath         string   `json:"save_path"`
 | ||
| 	FileName         string   `json:"file_name"`
 | ||
| 	AutoRename       bool     `json:"auto_rename"`
 | ||
| 	MaxSize          uint64   `json:"max_size"`
 | ||
| 	AllowedExtension []string `json:"allowed_extension"`
 | ||
| 	CallbackURL      string   `json:"callback_url"`
 | ||
| }
 | ||
| 
 | ||
| // UploadCredential 返回给客户端的上传凭证
 | ||
| type UploadCredential struct {
 | ||
| 	SessionID  string   `json:"sessionID"`
 | ||
| 	ChunkSize  uint64   `json:"chunkSize"` // 分块大小,0 为部分快
 | ||
| 	Expires    int64    `json:"expires"`   // 上传凭证过期时间, Unix 时间戳
 | ||
| 	UploadURLs []string `json:"uploadURLs,omitempty"`
 | ||
| 	Credential string   `json:"credential,omitempty"`
 | ||
| 	UploadID   string   `json:"uploadID,omitempty"`
 | ||
| 	Callback   string   `json:"callback,omitempty"` // 回调地址
 | ||
| 
 | ||
| 	Token     string `json:"token"`
 | ||
| 	Policy    string `json:"policy"`
 | ||
| 	Path      string `json:"path"` // 存储路径
 | ||
| 	AccessKey string `json:"ak"`
 | ||
| 	KeyTime   string `json:"key_time,omitempty"` // COS用有效期
 | ||
| 	Key       string `json:"key,omitempty"`      // 文件标识符,通常为回调key
 | ||
| }
 | ||
| 
 | ||
| // UploadSession 上传会话
 | ||
| type UploadSession struct {
 | ||
| 	Key            string     // 上传会话 GUID
 | ||
| 	UID            uint       // 发起者
 | ||
| 	VirtualPath    string     // 用户文件路径,不含文件名
 | ||
| 	Name           string     // 文件名
 | ||
| 	Size           uint64     // 文件大小
 | ||
| 	SavePath       string     // 物理存储路径,包含物理文件名
 | ||
| 	LastModified   *time.Time // 可选的文件最后修改日期
 | ||
| 	Policy         model.Policy
 | ||
| 	Callback       string // 回调 URL 地址
 | ||
| 	CallbackSecret string // 回调 URL
 | ||
| 	UploadURL      string
 | ||
| 	UploadID       string
 | ||
| 	Credential     string
 | ||
| }
 | ||
| 
 | ||
| // UploadCallback 上传回调正文
 | ||
| type UploadCallback struct {
 | ||
| 	PicInfo string `json:"pic_info"`
 | ||
| }
 | ||
| 
 | ||
| // GeneralUploadCallbackFailed 存储策略上传回调失败响应
 | ||
| type GeneralUploadCallbackFailed struct {
 | ||
| 	Error string `json:"error"`
 | ||
| }
 | ||
| 
 | ||
| func init() {
 | ||
| 	gob.Register(UploadSession{})
 | ||
| }
 | ||
| 
 | ||
| // DecodeUploadPolicy 反序列化Header中携带的上传策略
 | ||
| func DecodeUploadPolicy(raw string) (*UploadPolicy, error) {
 | ||
| 	var res UploadPolicy
 | ||
| 
 | ||
| 	rawJSON, err := base64.StdEncoding.DecodeString(raw)
 | ||
| 	if err != nil {
 | ||
| 		return nil, err
 | ||
| 	}
 | ||
| 
 | ||
| 	err = json.Unmarshal(rawJSON, &res)
 | ||
| 	if err != nil {
 | ||
| 		return nil, err
 | ||
| 	}
 | ||
| 
 | ||
| 	return &res, err
 | ||
| }
 | ||
| 
 | ||
| // EncodeUploadPolicy 序列化Header中携带的上传策略
 | ||
| func (policy *UploadPolicy) EncodeUploadPolicy() (string, error) {
 | ||
| 	jsonRes, err := json.Marshal(policy)
 | ||
| 	if err != nil {
 | ||
| 		return "", err
 | ||
| 	}
 | ||
| 
 | ||
| 	res := base64.StdEncoding.EncodeToString(jsonRes)
 | ||
| 	return res, nil
 | ||
| 
 | ||
| }
 | 
