Feat: after uploading finished hook

This commit is contained in:
HFO4
2019-11-18 19:32:06 +08:00
parent aa17aa8e6a
commit 2e9f256462
7 changed files with 39 additions and 15 deletions

View File

@@ -104,7 +104,16 @@ func (fs *FileSystem) Upload(ctx context.Context, file FileData) (err error) {
if fs.AfterUpload != nil {
ctx = context.WithValue(ctx, SavePathCtx, savePath)
err = fs.AfterUpload(ctx, fs)
if err != nil {
// 上传完成后续处理失败
if fs.AfterValidateFailed != nil {
followUpErr := fs.AfterValidateFailed(ctx, fs)
// 失败后再失败...
if followUpErr != nil {
util.Log().Warning("AfterValidateFailed 钩子执行失败,%s", followUpErr)
}
}
return err
}
}

View File

@@ -4,6 +4,7 @@ import (
"context"
"errors"
"github.com/HFO4/cloudreve/pkg/util"
"github.com/gin-gonic/gin"
)
// GenericBeforeUpload 通用上传前处理钩子,包含数据库操作
@@ -36,7 +37,7 @@ func GenericBeforeUpload(ctx context.Context, fs *FileSystem) error {
func GenericAfterUploadCanceled(ctx context.Context, fs *FileSystem) error {
file := ctx.Value(FileCtx).(FileData)
filePath := ctx.Value("path").(string)
filePath := ctx.Value(SavePathCtx).(string)
// 删除临时文件
if util.Exists(filePath) {
_, err := fs.Handler.Delete(ctx, []string{filePath})
@@ -55,13 +56,13 @@ func GenericAfterUploadCanceled(ctx context.Context, fs *FileSystem) error {
// GenericAfterUpload 文件上传完成后,包含数据库操作
func GenericAfterUpload(ctx context.Context, fs *FileSystem) error {
// 获取Gin的上下文
//ginCtx := ctx.Value(GinCtx).(*gin.Context)
ginCtx := ctx.Value(GinCtx).(*gin.Context)
// 文件存放的虚拟路径
//virtualPath := ginCtx.GetHeader("X-Path")
virtualPath := util.DotPathToStandardPath(ginCtx.GetHeader("X-Path"))
// 检查路径是否存在
if !fs.IsPathExist("/") {
return errors.New("sss")
if !fs.IsPathExist(virtualPath) {
return errors.New("路径\"" + virtualPath + "\"不存在")
}
return nil
}

View File

@@ -48,8 +48,8 @@ func (handler Handler) Delete(ctx context.Context, files []string) ([]string, er
err := os.Remove(value)
if err == nil {
deleted = append(deleted, value)
util.Log().Warning("无法删除文件,%s", err)
} else {
util.Log().Warning("无法删除文件,%s", err)
retErr = err
}
}

8
pkg/util/path.go Normal file
View File

@@ -0,0 +1,8 @@
package util
import "strings"
// DotPathToStandardPath 将","分割的路径转换为标准路径
func DotPathToStandardPath(path string) string {
return "/" + strings.Replace(path, ",", "/", -1)
}