From ea925aff32b46b33c9d4b0438537aa4f95516473 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sun, 14 Dec 2025 11:36:02 +0800 Subject: [PATCH] :art: Fix https://github.com/siyuan-note/siyuan/issues/16576 Signed-off-by: Daniel <845765@qq.com> --- kernel/model/upload.go | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/kernel/model/upload.go b/kernel/model/upload.go index 49a896a16..76f9e9ec7 100644 --- a/kernel/model/upload.go +++ b/kernel/model/upload.go @@ -84,14 +84,26 @@ func InsertLocalAssets(id string, assetAbsPaths []string, isUpload bool) (succMa err = openErr return } + hash, hashErr := util.GetEtagByHandle(f, fi.Size()) if nil != hashErr { f.Close() return } - if existAssetPath := GetAssetPathByHash(hash); "" != existAssetPath { - // 已经存在同样数据的资源文件的话不重复保存 + if 1 > fi.Size() { + hash = "random_1_" + gulu.Rand.String(12) + } + + existAssetPath := GetAssetPathByHash(hash) + if "" != existAssetPath { + originalName := util.RemoveID(filepath.Base(existAssetPath)) + if fName != originalName { + hash = "random_2_" + gulu.Rand.String(12) + } + } + + if "" != existAssetPath && !strings.HasPrefix(hash, "random_") { succMap[baseName] = existAssetPath } else { fName = util.AssetName(fName, ast.NewNodeID()) @@ -200,8 +212,19 @@ func Upload(c *gin.Context) { break } - if existAssetPath := GetAssetPathByHash(hash); "" != existAssetPath { - // 已经存在同样数据的资源文件的话不重复保存 + if 1 > file.Size { + hash = "empty_" + gulu.Rand.String(12) + } + + existAssetPath := GetAssetPathByHash(hash) + if "" != existAssetPath { + originalName := util.RemoveID(filepath.Base(existAssetPath)) + if fName != originalName { + hash = "random_2_" + gulu.Rand.String(12) + } + } + + if "" != existAssetPath && !strings.HasPrefix(hash, "random_") { succMap[baseName] = existAssetPath } else { if skipIfDuplicated {