Fix: do hard-copy when editing file with soft links

This commit is contained in:
HFO4
2020-01-16 10:11:16 +08:00
parent 098aa0a0c0
commit 0e62665d7f
6 changed files with 88 additions and 1 deletions

View File

@@ -268,6 +268,7 @@ func (service *SingleFileService) PutContent(ctx context.Context, c *gin.Context
if err != nil {
return serializer.Err(serializer.CodePolicyNotAllowed, err.Error(), err)
}
uploadCtx := context.WithValue(ctx, fsctx.GinCtx, c)
// 取得现有文件
exist, originFile := fs.IsFileExist(service.Path)
@@ -275,6 +276,16 @@ func (service *SingleFileService) PutContent(ctx context.Context, c *gin.Context
return serializer.Err(404, "文件不存在", nil)
}
// 检查此文件是否有软链接
fileList, err := model.RemoveFilesWithSoftLinks([]model.File{*originFile})
if err == nil && len(fileList) == 0 {
// 如果包含软连接应重新生成新文件副本并更新source_name
originFile.SourceName = fs.GenerateSavePath(uploadCtx, fileData)
fs.Use("AfterUpload", filesystem.HookUpdateSourceName)
fs.Use("AfterUploadCanceled", filesystem.HookUpdateSourceName)
fs.Use("AfterValidateFailed", filesystem.HookUpdateSourceName)
}
// 给文件系统分配钩子
fs.Use("BeforeUpload", filesystem.HookValidateFile)
fs.Use("BeforeUpload", filesystem.HookResetPolicy)
@@ -288,7 +299,6 @@ func (service *SingleFileService) PutContent(ctx context.Context, c *gin.Context
fs.Use("AfterValidateFailed", filesystem.HookGiveBackCapacity)
// 执行上传
uploadCtx := context.WithValue(ctx, fsctx.GinCtx, c)
uploadCtx = context.WithValue(uploadCtx, fsctx.FileModelCtx, *originFile)
err = fs.Upload(uploadCtx, fileData)
if err != nil {