feat(fs): add overwrite option to preventing unintentional overwriting (#7809)

This commit is contained in:
Jealous
2025-01-18 23:39:07 +08:00
committed by GitHub
parent bb40e2e2cd
commit 59e02287b2
2 changed files with 48 additions and 5 deletions

View File

@ -34,12 +34,20 @@ func FsStream(c *gin.Context) {
return
}
asTask := c.GetHeader("As-Task") == "true"
overwrite := c.GetHeader("Overwrite") != "false"
user := c.MustGet("user").(*model.User)
path, err = user.JoinPath(path)
if err != nil {
common.ErrorResp(c, err, 403)
return
}
if !overwrite {
if res, _ := fs.Get(c, path, &fs.GetArgs{NoLog: true}); res != nil {
_, _ = io.Copy(io.Discard, c.Request.Body)
common.ErrorStrResp(c, "file exists", 403)
return
}
}
dir, name := stdpath.Split(path)
sizeStr := c.GetHeader("Content-Length")
size, err := strconv.ParseInt(sizeStr, 10, 64)
@ -85,12 +93,20 @@ func FsForm(c *gin.Context) {
return
}
asTask := c.GetHeader("As-Task") == "true"
overwrite := c.GetHeader("Overwrite") != "false"
user := c.MustGet("user").(*model.User)
path, err = user.JoinPath(path)
if err != nil {
common.ErrorResp(c, err, 403)
return
}
if !overwrite {
if res, _ := fs.Get(c, path, &fs.GetArgs{NoLog: true}); res != nil {
_, _ = io.Copy(io.Discard, c.Request.Body)
common.ErrorStrResp(c, "file exists", 403)
return
}
}
storage, err := fs.GetStorage(path, &fs.GetStoragesArgs{})
if err != nil {
common.ErrorResp(c, err, 400)