Feat: after uploading finished hook
This commit is contained in:
parent
aa17aa8e6a
commit
2e9f256462
7 changed files with 39 additions and 15 deletions
|
@ -19,6 +19,6 @@ type Folder struct {
|
|||
// GetFolderByPath 根据绝对路径和UID查找目录
|
||||
func GetFolderByPath(path string, uid uint) (Folder, error) {
|
||||
var folder Folder
|
||||
result := DB.Where("owner = ? AND position_absolute = ?", uid, path).Find(&folder)
|
||||
result := DB.Where("owner_id = ? AND position_absolute = ?", uid, path).Find(&folder)
|
||||
return folder, result.Error
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package model
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/DATA-DOG/go-sqlmock"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
@ -9,12 +9,16 @@ import (
|
|||
func TestGetFolderByPath(t *testing.T) {
|
||||
asserts := assert.New(t)
|
||||
|
||||
//policyRows := sqlmock.NewRows([]string{"id", "name"}).
|
||||
// AddRow(1, "默认上传策略")
|
||||
//mock.ExpectQuery("^SELECT (.+)").WillReturnRows(policyRows)
|
||||
|
||||
folder,_ := GetFolderByPath("/测试/test",1)
|
||||
fmt.Println(folder)
|
||||
folderRows := sqlmock.NewRows([]string{"id", "name"}).
|
||||
AddRow(1, "test")
|
||||
mock.ExpectQuery("^SELECT (.+)").WillReturnRows(folderRows)
|
||||
folder, _ := GetFolderByPath("/测试/test", 1)
|
||||
asserts.Equal("test", folder.Name)
|
||||
asserts.NoError(mock.ExpectationsWereMet())
|
||||
|
||||
folderRows = sqlmock.NewRows([]string{"id", "name"})
|
||||
mock.ExpectQuery("^SELECT (.+)").WillReturnRows(folderRows)
|
||||
folder, err := GetFolderByPath("/测试/test", 1)
|
||||
asserts.Error(err)
|
||||
asserts.NoError(mock.ExpectationsWereMet())
|
||||
asserts.NoError(mock.)
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
8
pkg/util/path.go
Normal file
|
@ -0,0 +1,8 @@
|
|||
package util
|
||||
|
||||
import "strings"
|
||||
|
||||
// DotPathToStandardPath 将","分割的路径转换为标准路径
|
||||
func DotPathToStandardPath(path string) string {
|
||||
return "/" + strings.Replace(path, ",", "/", -1)
|
||||
}
|
|
@ -71,6 +71,8 @@ func FileUploadStream(c *gin.Context) {
|
|||
// 给文件系统分配钩子
|
||||
fs.BeforeUpload = filesystem.GenericBeforeUpload
|
||||
fs.AfterUploadCanceled = filesystem.GenericAfterUploadCanceled
|
||||
fs.AfterUpload = filesystem.GenericAfterUpload
|
||||
fs.AfterValidateFailed = filesystem.GenericAfterUploadCanceled
|
||||
|
||||
// 执行上传
|
||||
uploadCtx := context.WithValue(ctx, filesystem.GinCtx, c)
|
||||
|
|
Loading…
Add table
Reference in a new issue