diff --git a/models/policy.go b/models/policy.go index c742b3e..d58502e 100644 --- a/models/policy.go +++ b/models/policy.go @@ -162,6 +162,11 @@ func (policy *Policy) IsPathGenerateNeeded() bool { return policy.Type != "remote" } +// IsThumbGenerateNeeded 返回此策略是否需要在上传后生成缩略图 +func (policy *Policy) IsThumbGenerateNeeded() bool { + return policy.Type == "local" +} + // GetUploadURL 获取文件上传服务API地址 func (policy *Policy) GetUploadURL() string { server, err := url.Parse(policy.Server) diff --git a/pkg/filesystem/hooks.go b/pkg/filesystem/hooks.go index d30817d..aab2355 100644 --- a/pkg/filesystem/hooks.go +++ b/pkg/filesystem/hooks.go @@ -139,12 +139,9 @@ func HookChangeCapacity(ctx context.Context, fs *FileSystem) error { func HookDeleteTempFile(ctx context.Context, fs *FileSystem) error { filePath := ctx.Value(fsctx.SavePathCtx).(string) // 删除临时文件 - // TODO 其他策略。Exists? - if util.Exists(filePath) { - _, err := fs.Handler.Delete(ctx, []string{filePath}) - if err != nil { - return err - } + _, err := fs.Handler.Delete(ctx, []string{filePath}) + if err != nil { + util.Log().Warning("无法清理上传临时文件,%s", err) } return nil @@ -207,12 +204,14 @@ func GenericAfterUpdate(ctx context.Context, fs *FileSystem) error { } // 尝试清空原有缩略图并重新生成 - go func() { - if originFile.PicInfo != "" { - _, _ = fs.Handler.Delete(ctx, []string{originFile.SourceName + conf.ThumbConfig.FileSuffix}) - fs.GenerateThumbnail(ctx, &originFile) - } - }() + if originFile.GetPolicy().IsThumbGenerateNeeded() { + go func() { + if originFile.PicInfo != "" { + _, _ = fs.Handler.Delete(ctx, []string{originFile.SourceName + conf.ThumbConfig.FileSuffix}) + fs.GenerateThumbnail(ctx, &originFile) + } + }() + } return nil } @@ -270,7 +269,9 @@ func GenericAfterUpload(ctx context.Context, fs *FileSystem) error { fs.SetTargetFile(&[]model.File{*file}) // 异步尝试生成缩略图 - go fs.GenerateThumbnail(ctx, file) + if fs.User.Policy.IsThumbGenerateNeeded() { + go fs.GenerateThumbnail(ctx, file) + } return nil } diff --git a/pkg/filesystem/oss/handller.go b/pkg/filesystem/oss/handller.go index 5e3b687..cd602dd 100644 --- a/pkg/filesystem/oss/handller.go +++ b/pkg/filesystem/oss/handller.go @@ -116,7 +116,27 @@ func (handler Handler) Get(ctx context.Context, path string) (response.RSCloser, // Put 将文件流保存到指定目录 func (handler Handler) Put(ctx context.Context, file io.ReadCloser, dst string, size uint64) error { - return errors.New("未实现") + defer file.Close() + + // 初始化客户端 + if err := handler.InitOSSClient(); err != nil { + return err + } + + // 凭证有效期 + credentialTTL := model.GetIntSetting("upload_credential_timeout", 3600) + + options := []oss.Option{ + oss.Expires(time.Now().Add(time.Duration(credentialTTL) * time.Second)), + } + + // 上传文件 + err := handler.bucket.PutObject(dst, file, options...) + if err != nil { + return err + } + + return nil } // Delete 删除一个或多个文件, @@ -217,7 +237,7 @@ func (handler Handler) Source( func (handler Handler) signSourceURL(ctx context.Context, path string, ttl int64, options []oss.Option) (string, error) { // 是否带有 Version ID - if versionID, ok := ctx.Value(VersionID).(int64); ok { + if _, ok := ctx.Value(VersionID).(int64); ok { } signedURL, err := handler.bucket.SignURL(path, oss.HTTPGet, ttl, options...)