From c6b20179a6d63ff7015ef595dcd3c70f436b96df Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Mon, 14 Nov 2022 20:47:40 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E5=AF=BC=E5=87=BA=E4=B8=BA?= =?UTF-8?q?=E9=95=BF=E5=9B=BE=20https://github.com/siyuan-note/siyuan/issu?= =?UTF-8?q?es/2919?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/api/export.go | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/kernel/api/export.go b/kernel/api/export.go index e4e25680c..243e6e39b 100644 --- a/kernel/api/export.go +++ b/kernel/api/export.go @@ -25,6 +25,7 @@ import ( "strings" "github.com/88250/gulu" + "github.com/88250/lute/ast" "github.com/gin-gonic/gin" "github.com/siyuan-note/logging" "github.com/siyuan-note/siyuan/kernel/model" @@ -311,7 +312,6 @@ func exportAsFile(c *gin.Context) { return } - typ := form.Value["type"][0] file := form.File["file"][0] reader, err := file.Open() if nil != err { @@ -330,5 +330,27 @@ func exportAsFile(c *gin.Context) { return } - c.Data(http.StatusOK, typ, data) + ext := filepath.Ext(file.Filename) + name := "save-as-file-" + ast.NewNodeID() + ext + tmpDir := filepath.Join(util.TempDir, "export") + if err = os.MkdirAll(tmpDir, 0755); nil != err { + logging.LogErrorf("export as file failed: %s", err) + ret.Code = -1 + ret.Msg = err.Error() + return + } + + tmp := filepath.Join(tmpDir, name) + err = os.WriteFile(tmp, data, 0644) + if nil != err { + logging.LogErrorf("export as file failed: %s", err) + ret.Code = -1 + ret.Msg = err.Error() + return + } + + ret.Data = map[string]interface{}{ + "name": name, + "file": path.Join("/export/", name), + } }