From 6e754ef190a73f0f79ae1d56c32d27a6a062422e Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 23 Aug 2022 23:19:38 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=A1=8C=E9=9D=A2=E7=AB=AF=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=AF=BC=E5=87=BA=E5=9B=BE=E7=89=87=E3=80=81=E9=9F=B3?= =?UTF-8?q?=E9=A2=91=E5=92=8C=E8=A7=86=E9=A2=91=20Fix=20https://github.com?= =?UTF-8?q?/siyuan-note/siyuan/issues/5693?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/menus/util.ts | 2 +- kernel/api/file.go | 45 +++++++++++++++++++++++++++++++++++++++++++ kernel/api/router.go | 1 + 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/app/src/menus/util.ts b/app/src/menus/util.ts index ff1145026..1c572cbaa 100644 --- a/app/src/menus/util.ts +++ b/app/src/menus/util.ts @@ -16,7 +16,7 @@ export const exportAsset = (src: string) => { properties: ["showOverwriteConfirmation"], }).then((result: SaveDialogReturnValue) => { if (!result.canceled) { - fetchPost("/api/file/saveAs", {src, targe: result.filePath}) + fetchPost("/api/file/copyFile", {src, dest: result.filePath}) } }); } diff --git a/kernel/api/file.go b/kernel/api/file.go index aaa6d7868..ae58958a7 100644 --- a/kernel/api/file.go +++ b/kernel/api/file.go @@ -34,6 +34,51 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) +func copyFile(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + src := arg["src"].(string) + src, err := model.GetAssetAbsPath(src) + if nil != err { + logging.LogErrorf("get asset [%s] abs path failed: %s", src, err) + ret.Code = -1 + ret.Msg = err.Error() + ret.Data = map[string]interface{}{"closeTimeout": 5000} + return + } + + info, err := os.Stat(src) + if nil != err { + logging.LogErrorf("stat [%s] failed: %s", src, err) + ret.Code = -1 + ret.Msg = err.Error() + ret.Data = map[string]interface{}{"closeTimeout": 5000} + return + } + + if info.IsDir() { + ret.Code = -1 + ret.Msg = "file is a directory" + ret.Data = map[string]interface{}{"closeTimeout": 5000} + return + } + + dest := arg["dest"].(string) + if err = gulu.File.CopyFile(src, dest); nil != err { + logging.LogErrorf("copy file [%s] to [%s] failed: %s", src, dest, err) + ret.Code = -1 + ret.Msg = err.Error() + ret.Data = map[string]interface{}{"closeTimeout": 5000} + return + } +} + func getFile(c *gin.Context) { ret := gulu.Ret.NewResult() arg, ok := util.JsonArg(c, ret) diff --git a/kernel/api/router.go b/kernel/api/router.go index 9ce22d7a3..e21c8d5d4 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -147,6 +147,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/file/getFile", model.CheckAuth, getFile) ginServer.Handle("POST", "/api/file/putFile", model.CheckAuth, putFile) + ginServer.Handle("POST", "/api/file/copyFile", model.CheckAuth, copyFile) ginServer.Handle("POST", "/api/ref/refreshBacklink", model.CheckAuth, refreshBacklink) ginServer.Handle("POST", "/api/ref/getBacklink", model.CheckAuth, getBacklink)