diff --git a/kernel/api/file.go b/kernel/api/file.go index 5845c43bb..fd7d1d4f0 100644 --- a/kernel/api/file.go +++ b/kernel/api/file.go @@ -18,6 +18,7 @@ package api import ( "io" + "mime" "mime/multipart" "net/http" "os" @@ -26,6 +27,7 @@ import ( "time" "github.com/88250/gulu" + "github.com/gabriel-vasile/mimetype" "github.com/gin-gonic/gin" "github.com/siyuan-note/filelock" "github.com/siyuan-note/logging" @@ -104,10 +106,23 @@ func getFile(c *gin.Context) { return } - if err = model.ServeFile(c, filePath); nil != err { - c.Status(http.StatusConflict) + data, err := filelock.ReadFile(filePath) + if nil != err { + logging.LogErrorf("read file [%s] failed: %s", filePath, err) + c.Status(500) return } + + contentType := mime.TypeByExtension(filepath.Ext(filePath)) + if "" == contentType { + if m := mimetype.Detect(data); nil != m { + contentType = m.String() + } + } + if "" == contentType { + contentType = "application/octet-stream" + } + c.Data(http.StatusOK, contentType, data) } func readDir(c *gin.Context) { @@ -179,7 +194,7 @@ func removeFile(c *gin.Context) { return } - if err = os.RemoveAll(filePath); nil != err { + if err = filelock.Remove(filePath); nil != err { c.Status(500) return } diff --git a/kernel/model/file.go b/kernel/model/file.go index 25e6987b2..af809fafe 100644 --- a/kernel/model/file.go +++ b/kernel/model/file.go @@ -36,7 +36,6 @@ import ( util2 "github.com/88250/lute/util" "github.com/dustin/go-humanize" "github.com/facette/natsort" - "github.com/gin-gonic/gin" "github.com/siyuan-note/filelock" "github.com/siyuan-note/logging" "github.com/siyuan-note/siyuan/kernel/cache" @@ -1641,9 +1640,3 @@ func (box *Box) removeSort(ids []string) { return } } - -func ServeFile(c *gin.Context, filePath string) (err error) { - WaitForWritingFiles() - c.File(filePath) - return -} diff --git a/kernel/util/working.go b/kernel/util/working.go index dde4d8b78..80586950a 100644 --- a/kernel/util/working.go +++ b/kernel/util/working.go @@ -380,6 +380,9 @@ func initMime() { mime.AddExtensionType(".dxf", "image/x-dxf") mime.AddExtensionType(".dwf", "drawing/x-dwf") mime.AddExtensionType(".pdf", "application/pdf") + + // 文档数据文件 + mime.AddExtensionType(".sy", "application/json") } func initPandoc() {