diff --git a/kernel/model/import.go b/kernel/model/import.go index a103a5144..54d388ed6 100644 --- a/kernel/model/import.go +++ b/kernel/model/import.go @@ -394,6 +394,7 @@ func ImportFromLocalPath(boxID, localPath string, toPath string) (err error) { }) targetPaths := map[string]string{} + assetsDone := map[string]string{} // md 转换 sy i := 0 @@ -481,15 +482,19 @@ func ImportFromLocalPath(boxID, localPath string, toPath string) (err error) { } fullPath, exist = assets[absDest] if exist { - name := filepath.Base(fullPath) - ext := filepath.Ext(name) - name = strings.TrimSuffix(name, ext) - name += "-" + ast.NewNodeID() + ext - assetTargetPath := filepath.Join(assetDirPath, name) - delete(assets, absDest) - if err = gulu.File.Copy(fullPath, assetTargetPath); nil != err { - util.LogErrorf("copy asset from [%s] to [%s] failed: %s", fullPath, assetTargetPath, err) - return ast.WalkContinue + existName := assetsDone[absDest] + var name string + if "" == existName { + name = filepath.Base(fullPath) + name = util.AssetName(name) + assetTargetPath := filepath.Join(assetDirPath, name) + if err = gulu.File.Copy(fullPath, assetTargetPath); nil != err { + util.LogErrorf("copy asset from [%s] to [%s] failed: %s", fullPath, assetTargetPath, err) + return ast.WalkContinue + } + assetsDone[absDest] = name + } else { + name = existName } n.Tokens = gulu.Str.ToBytes("assets/" + name) } @@ -568,9 +573,7 @@ func ImportFromLocalPath(boxID, localPath string, toPath string) (err error) { } if exist { name := filepath.Base(absolutePath) - ext := filepath.Ext(name) - name = strings.TrimSuffix(name, ext) - name += "-" + ast.NewNodeID() + ext + name = util.AssetName(name) assetTargetPath := filepath.Join(assetDirPath, name) if err = gulu.File.CopyFile(absolutePath, assetTargetPath); nil != err { util.LogErrorf("copy asset from [%s] to [%s] failed: %s", absolutePath, assetTargetPath, err) diff --git a/kernel/model/upload.go b/kernel/model/upload.go index 20bd1cdb7..038ae5e5d 100644 --- a/kernel/model/upload.go +++ b/kernel/model/upload.go @@ -159,19 +159,7 @@ func Upload(c *gin.Context) { // 已经存在同样数据的资源文件的话不重复保存 succMap[baseName] = existAsset.Path } else { - _, id := util.LastID(fName) - ext := path.Ext(fName) - fName = fName[0 : len(fName)-len(ext)] - if !util.IsIDPattern(id) { - id = ast.NewNodeID() - fName = fName + "-" + id + ext - } else { - if !util.IsIDPattern(fName) { - fName = fName[:len(fName)-len(id)-1] + "-" + id + ext - } else { - fName = fName + ext - } - } + fName = util.AssetName(fName) writePath := filepath.Join(assetsDirPath, fName) if _, err = f.Seek(0, io.SeekStart); nil != err { errFiles = append(errFiles, fName) diff --git a/kernel/util/file.go b/kernel/util/file.go index 409fabd5c..6fdf2ccab 100644 --- a/kernel/util/file.go +++ b/kernel/util/file.go @@ -24,6 +24,7 @@ import ( "strings" "github.com/88250/gulu" + "github.com/88250/lute/ast" ) func IsEmptyDir(p string) bool { @@ -47,6 +48,23 @@ func RemoveID(name string) string { return name + ext } +func AssetName(name string) string { + _, id := LastID(name) + ext := path.Ext(name) + name = name[0 : len(name)-len(ext)] + if !IsIDPattern(id) { + id = ast.NewNodeID() + name = name + "-" + id + ext + } else { + if !IsIDPattern(name) { + name = name[:len(name)-len(id)-1] + "-" + id + ext + } else { + name = name + ext + } + } + return name +} + func LastID(p string) (name, id string) { name = path.Base(p) ext := path.Ext(name)