diff --git a/drivers/local/driver.go b/drivers/local/driver.go index c42efc473a5..9aabbb3bd31 100644 --- a/drivers/local/driver.go +++ b/drivers/local/driver.go @@ -98,6 +98,9 @@ func (d *Local) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([ func (d *Local) Get(ctx context.Context, path string) (model.Obj, error) { f, err := os.Stat(path) if err != nil { + if strings.Contains(err.Error(), "cannot find the file") { + return nil, errors.WithStack(errs.ObjectNotFound) + } return nil, errors.Wrapf(err, "error while stat %s", path) } file := model.Object{ diff --git a/server/handles/fsmanage.go b/server/handles/fsmanage.go index 5a66894e7f9..917dca22939 100644 --- a/server/handles/fsmanage.go +++ b/server/handles/fsmanage.go @@ -14,6 +14,7 @@ import ( "github.com/alist-org/alist/v3/pkg/utils" "github.com/alist-org/alist/v3/server/common" "github.com/gin-gonic/gin" + "github.com/pkg/errors" ) type MkdirOrLinkReq struct { @@ -31,8 +32,10 @@ func FsMkdir(c *gin.Context) { if !user.CanWrite() { meta, err := db.GetNearestMeta(req.Path) if err != nil { - common.ErrorResp(c, err, 500) - return + if !errors.Is(errors.Cause(err), errs.MetaNotFound) { + common.ErrorResp(c, err, 500, true) + return + } } if !canWrite(meta, req.Path) { common.ErrorResp(c, errs.PermissionDenied, 403) @@ -192,8 +195,10 @@ func FsPut(c *gin.Context) { if !user.CanWrite() { meta, err := db.GetNearestMeta(path) if err != nil { - common.ErrorResp(c, err, 500) - return + if !errors.Is(errors.Cause(err), errs.MetaNotFound) { + common.ErrorResp(c, err, 500, true) + return + } } if !canWrite(meta, path) { common.ErrorResp(c, errs.PermissionDenied, 403) diff --git a/server/router.go b/server/router.go index 2cc7b3ee3f4..2e976cbccc6 100644 --- a/server/router.go +++ b/server/router.go @@ -114,7 +114,7 @@ func fs(g *gin.RouterGroup) { g.POST("/move", handles.FsMove) g.POST("/copy", handles.FsCopy) g.POST("/remove", handles.FsRemove) - g.POST("/put", handles.FsPut) + g.PUT("/put", handles.FsPut) g.POST("/link", middlewares.AuthAdmin, handles.Link) g.POST("/add_aria2", handles.AddAria2) }