diff --git a/api/copyHandler.go b/api/copyHandler.go new file mode 100644 index 0000000..59cf9a4 --- /dev/null +++ b/api/copyHandler.go @@ -0,0 +1,57 @@ +package api + +import ( + "io" + "net/http" + "os" + "path/filepath" + + "github.com/gin-gonic/gin" + + "miao-directory/fsOperateEventCenter" +) + +func CopyHandler(fsOperateEventCenter *fsOperateEventCenter.FsOperateEventCenter) gin.HandlerFunc { + return func(c *gin.Context) { + var req struct { + NewPath string `json:"newPath"` + } + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "Invalid request body"}) + return + } + + decodedPath, err := filepath.Abs(filepath.Join(staticPath, c.Param("path"))) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "Unable to access path"}) + return + } + + newPath := filepath.Join(staticPath, req.NewPath, filepath.Base(decodedPath)) + eventId := fsOperateEventCenter.Push(func() error { + return copyFile(decodedPath, newPath) + }) + c.JSON(http.StatusOK, gin.H{"eventId": eventId}) + } +} + +func copyFile(src, dst string) error { + sourceFile, err := os.Open(src) + if err != nil { + return err + } + defer sourceFile.Close() + + destFile, err := os.Create(dst) + if err != nil { + return err + } + defer destFile.Close() + + _, err = io.Copy(destFile, sourceFile) + if err != nil { + return err + } + + return destFile.Sync() +} diff --git a/api/cutHandler.go b/api/cutHandler.go index bd2f573..7e47197 100644 --- a/api/cutHandler.go +++ b/api/cutHandler.go @@ -8,7 +8,7 @@ import ( "github.com/gin-gonic/gin" - "my-go-project/fsOperateEventCenter" + "miao-directory/fsOperateEventCenter" ) func CutHandler(fsOperateEventCenter *fsOperateEventCenter.FsOperateEventCenter) gin.HandlerFunc { @@ -33,4 +33,4 @@ func CutHandler(fsOperateEventCenter *fsOperateEventCenter.FsOperateEventCenter) }) c.JSON(http.StatusOK, gin.H{"eventId": eventId}) } -} \ No newline at end of file +} diff --git a/api/deleteHandler.go b/api/deleteHandler.go index 75ed9dd..f132fe1 100644 --- a/api/deleteHandler.go +++ b/api/deleteHandler.go @@ -2,13 +2,12 @@ package api import ( // "fmt" + "miao-directory/fsOperateEventCenter" "net/http" "os" "path/filepath" "github.com/gin-gonic/gin" - - "my-go-project/fsOperateEventCenter" ) func DeleteHandler(fsOperateEventCenter *fsOperateEventCenter.FsOperateEventCenter) gin.HandlerFunc { @@ -24,4 +23,4 @@ func DeleteHandler(fsOperateEventCenter *fsOperateEventCenter.FsOperateEventCent }) c.JSON(http.StatusOK, gin.H{"eventId": eventId}) } -} \ No newline at end of file +} diff --git a/api/queryHandler.go b/api/queryHandler.go index cc07edd..ae6227c 100644 --- a/api/queryHandler.go +++ b/api/queryHandler.go @@ -6,7 +6,7 @@ import ( "github.com/gin-gonic/gin" - "my-go-project/fsOperateEventCenter" + "miao-directory/fsOperateEventCenter" ) func QueryHandler(fsOperateEventCenter *fsOperateEventCenter.FsOperateEventCenter) gin.HandlerFunc { diff --git a/api/renameHandler.go b/api/renameHandler.go index c0079f2..fe03f0d 100644 --- a/api/renameHandler.go +++ b/api/renameHandler.go @@ -8,7 +8,7 @@ import ( "github.com/gin-gonic/gin" - "my-go-project/fsOperateEventCenter" + "miao-directory/fsOperateEventCenter" ) func RenameHandler(fsOperateEventCenter *fsOperateEventCenter.FsOperateEventCenter) gin.HandlerFunc { @@ -33,4 +33,4 @@ func RenameHandler(fsOperateEventCenter *fsOperateEventCenter.FsOperateEventCent }) c.JSON(http.StatusOK, gin.H{"eventId": eventId}) } -} \ No newline at end of file +} diff --git a/go.mod b/go.mod index 26dcbff..03c8501 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module my-go-project +module miao-directory go 1.23.0 diff --git a/main.go b/main.go index 70d8dc6..c8ab73c 100644 --- a/main.go +++ b/main.go @@ -8,8 +8,8 @@ import ( "github.com/gin-gonic/gin" - "my-go-project/api" - "my-go-project/fsOperateEventCenter" + "miao-directory/api" + "miao-directory/fsOperateEventCenter" ) var staticPath = "./" @@ -29,6 +29,7 @@ func main() { router.POST("/mkdir", api.MkdirHandler) router.POST("/upload/*path", api.UploadHandler) router.POST("/cut/*path", api.CutHandler(fsOperateEventCenter)) + router.POST("/copy/*path", api.CopyHandler(fsOperateEventCenter)) router.POST("/rename/*path", api.RenameHandler(fsOperateEventCenter)) router.POST("/delete/*path", api.DeleteHandler(fsOperateEventCenter)) diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..559927c --- /dev/null +++ b/readme.md @@ -0,0 +1,2 @@ +# miao-directory的后端部分 +* 原有的node后端不再维护。 \ No newline at end of file