🎨 If a file with the same name exists during export PDF/Docx, it will be automatically renamed https://github.com/siyuan-note/siyuan/issues/11357
This commit is contained in:
parent
abf92b602c
commit
749ed8a4ac
4 changed files with 36 additions and 19 deletions
|
@ -36,6 +36,21 @@ import (
|
|||
"github.com/siyuan-note/siyuan/kernel/util"
|
||||
)
|
||||
|
||||
func getUniqueFilename(c *gin.Context) {
|
||||
ret := gulu.Ret.NewResult()
|
||||
defer c.JSON(http.StatusOK, ret)
|
||||
|
||||
arg, ok := util.JsonArg(c, ret)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
filePath := arg["path"].(string)
|
||||
ret.Data = map[string]interface{}{
|
||||
"path": util.GetUniqueFilename(filePath),
|
||||
}
|
||||
}
|
||||
|
||||
func globalCopyFiles(c *gin.Context) {
|
||||
ret := gulu.Ret.NewResult()
|
||||
defer c.JSON(http.StatusOK, ret)
|
||||
|
|
|
@ -208,6 +208,7 @@ func ServeAPI(ginServer *gin.Engine) {
|
|||
ginServer.Handle("POST", "/api/file/removeFile", model.CheckAuth, model.CheckReadonly, removeFile)
|
||||
ginServer.Handle("POST", "/api/file/renameFile", model.CheckAuth, model.CheckReadonly, renameFile)
|
||||
ginServer.Handle("POST", "/api/file/readDir", model.CheckAuth, readDir)
|
||||
ginServer.Handle("POST", "/api/file/getUniqueFilename", model.CheckAuth, getUniqueFilename)
|
||||
|
||||
ginServer.Handle("POST", "/api/ref/refreshBacklink", model.CheckAuth, refreshBacklink)
|
||||
ginServer.Handle("POST", "/api/ref/getBacklink", model.CheckAuth, getBacklink)
|
||||
|
|
|
@ -180,7 +180,7 @@ func ExportAv2CSV(avID, blockID string) (zipPath string, err error) {
|
|||
}
|
||||
writer.Flush()
|
||||
|
||||
zipPath = getUniqueFilename(exportFolder + ".db.zip")
|
||||
zipPath = exportFolder + ".db.zip"
|
||||
zip, err := gulu.Zip.Create(zipPath)
|
||||
if nil != err {
|
||||
logging.LogErrorf("create export .db.zip [%s] failed: %s", exportFolder, err)
|
||||
|
@ -209,24 +209,6 @@ func ExportAv2CSV(avID, blockID string) (zipPath string, err error) {
|
|||
return
|
||||
}
|
||||
|
||||
func getUniqueFilename(filePath string) string {
|
||||
if !gulu.File.IsExist(filePath) {
|
||||
return filePath
|
||||
}
|
||||
|
||||
ext := filepath.Ext(filePath)
|
||||
base := strings.TrimSuffix(filepath.Base(filePath), ext)
|
||||
dir := filepath.Dir(filePath)
|
||||
i := 1
|
||||
for {
|
||||
newPath := filepath.Join(dir, base+" ("+strconv.Itoa(i)+ext) + ")"
|
||||
if !gulu.File.IsExist(newPath) {
|
||||
return newPath
|
||||
}
|
||||
i++
|
||||
}
|
||||
}
|
||||
|
||||
func Export2Liandi(id string) (err error) {
|
||||
tree, err := LoadTreeByBlockID(id)
|
||||
if nil != err {
|
||||
|
|
|
@ -24,6 +24,7 @@ import (
|
|||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
|
||||
|
@ -34,6 +35,24 @@ import (
|
|||
"github.com/siyuan-note/logging"
|
||||
)
|
||||
|
||||
func GetUniqueFilename(filePath string) string {
|
||||
if !gulu.File.IsExist(filePath) {
|
||||
return filePath
|
||||
}
|
||||
|
||||
ext := filepath.Ext(filePath)
|
||||
base := strings.TrimSuffix(filepath.Base(filePath), ext)
|
||||
dir := filepath.Dir(filePath)
|
||||
i := 1
|
||||
for {
|
||||
newPath := filepath.Join(dir, base+" ("+strconv.Itoa(i)+")"+ext)
|
||||
if !gulu.File.IsExist(newPath) {
|
||||
return newPath
|
||||
}
|
||||
i++
|
||||
}
|
||||
}
|
||||
|
||||
func GetMimeTypeByExt(filePath string) (ret string) {
|
||||
ret = mime.TypeByExtension(filepath.Ext(filePath))
|
||||
if "" == ret {
|
||||
|
|
Loading…
Add table
Reference in a new issue