|
|
|
@ -8,7 +8,9 @@ import (
|
|
|
|
|
"github.com/jinzhu/gorm"
|
|
|
|
|
"net/url"
|
|
|
|
|
"path"
|
|
|
|
|
"path/filepath"
|
|
|
|
|
"strconv"
|
|
|
|
|
"strings"
|
|
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
@ -48,6 +50,16 @@ type PolicyOption struct {
|
|
|
|
|
OdRedirect string `json:"od_redirect,omitempty"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var thumbSuffix = map[string][]string{
|
|
|
|
|
"local": {},
|
|
|
|
|
"qiniu": {".psd", ".jpg", ".jpeg", ".png", ".gif", ".webp", ".tiff", ".bmp"},
|
|
|
|
|
"oss": {".jpg", ".jpeg", ".png", ".gif", ".webp", ".tiff", ".bmp"},
|
|
|
|
|
"cos": {},
|
|
|
|
|
"upyun": {".svg", ".jpg", ".jpeg", ".png", ".gif", ".webp", ".tiff", ".bmp"},
|
|
|
|
|
"remote": {},
|
|
|
|
|
"onedrive": {"*"},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
// 注册缓存用到的复杂结构
|
|
|
|
|
gob.Register(Policy{})
|
|
|
|
@ -178,6 +190,17 @@ func (policy *Policy) IsDirectlyPreview() bool {
|
|
|
|
|
return policy.Type == "local"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// IsThumbExist 给定文件名,返回此存储策略下是否可能存在缩略图
|
|
|
|
|
func (policy *Policy) IsThumbExist(name string) bool {
|
|
|
|
|
if list, ok := thumbSuffix[policy.Type]; ok {
|
|
|
|
|
if len(list) == 1 && list[0] == "*" {
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
return util.ContainsString(list, strings.ToLower(filepath.Ext(name)))
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// IsTransitUpload 返回此策略上传给定size文件时是否需要服务端中转
|
|
|
|
|
func (policy *Policy) IsTransitUpload(size uint64) bool {
|
|
|
|
|
if policy.Type == "local" {
|
|
|
|
@ -199,11 +222,6 @@ func (policy *Policy) IsThumbGenerateNeeded() bool {
|
|
|
|
|
return policy.Type == "local"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// IsMockThumbNeeded 返回此策略是否需要在上传后默认当图像文件
|
|
|
|
|
func (policy *Policy) IsMockThumbNeeded() bool {
|
|
|
|
|
return policy.Type == "onedrive"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetUploadURL 获取文件上传服务API地址
|
|
|
|
|
func (policy *Policy) GetUploadURL() string {
|
|
|
|
|
server, err := url.Parse(policy.Server)
|
|
|
|
|