diff --git a/models/policy.go b/models/policy.go index fc9708425b8ba88ea523c8e58e11ff88bb068212..2aa248f70b3542ee3093eb0eda88cc13c871937a 100644 --- a/models/policy.go +++ b/models/policy.go @@ -54,7 +54,7 @@ var thumbSuffix = map[string][]string{ "local": {}, "qiniu": {".psd", ".jpg", ".jpeg", ".png", ".gif", ".webp", ".tiff", ".bmp"}, "oss": {".jpg", ".jpeg", ".png", ".gif", ".webp", ".tiff", ".bmp"}, - "cos": {}, + "cos": {".jpg", ".jpeg", ".png", ".gif", ".webp", ".tiff", ".bmp"}, "upyun": {".svg", ".jpg", ".jpeg", ".png", ".gif", ".webp", ".tiff", ".bmp"}, "remote": {}, "onedrive": {"*"}, diff --git a/pkg/filesystem/driver/cos/handler.go b/pkg/filesystem/driver/cos/handler.go index f012350dc8625cae3f71c81c7e399cb603278f01..0190d9816850191e2c6686aeef741e2fdc8e2d6c 100644 --- a/pkg/filesystem/driver/cos/handler.go +++ b/pkg/filesystem/driver/cos/handler.go @@ -143,7 +143,34 @@ func (handler Driver) Delete(ctx context.Context, files []string) ([]string, err // Thumb 获取文件缩略图 func (handler Driver) Thumb(ctx context.Context, path string) (*response.ContentResponse, error) { - return nil, errors.New("未实现") + var ( + thumbSize = [2]uint{400, 300} + ok = false + ) + if thumbSize, ok = ctx.Value(fsctx.ThumbSizeCtx).([2]uint); !ok { + return nil, errors.New("无法获取缩略图尺寸设置") + } + thumbParam := fmt.Sprintf("imageMogr2/thumbnail/%dx%d", thumbSize[0], thumbSize[1]) + + source, err := handler.signSourceURL( + ctx, + path, + int64(model.GetIntSetting("preview_timeout", 60)), + &urlOption{}, + ) + if err != nil { + return nil, err + } + + thumbURL, _ := url.Parse(source) + thumbQuery := thumbURL.Query() + thumbQuery.Add(thumbParam, "") + thumbURL.RawQuery = thumbQuery.Encode() + + return &response.ContentResponse{ + Redirect: true, + URL: thumbURL.String(), + }, nil } // Source 获取外链URL