فهرست منبع

:art: 桌面端支持导出图片、音频和视频 Fix https://github.com/siyuan-note/siyuan/issues/5693

Liang Ding 2 سال پیش
والد
کامیت
6e754ef190
3فایلهای تغییر یافته به همراه47 افزوده شده و 1 حذف شده
  1. 1 1
      app/src/menus/util.ts
  2. 45 0
      kernel/api/file.go
  3. 1 0
      kernel/api/router.go

+ 1 - 1
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})
                 }
             });
         }

+ 45 - 0
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)

+ 1 - 0
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)