mirror of
https://github.com/gin-gonic/gin.git
synced 2026-06-06 20:18:19 +08:00
refactor: cover directory setup helper
This commit is contained in:
parent
eea9cbc48e
commit
2ac84ddd38
19
context.go
19
context.go
@ -723,6 +723,16 @@ func dirExists(path string) bool {
|
|||||||
return info.IsDir()
|
return info.IsDir()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ensureDirWithMode(dir string, mode fs.FileMode) error {
|
||||||
|
if dirExists(dir) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if err := os.MkdirAll(dir, mode); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return os.Chmod(dir, mode)
|
||||||
|
}
|
||||||
|
|
||||||
// SaveUploadedFile uploads the form file to specific dst.
|
// SaveUploadedFile uploads the form file to specific dst.
|
||||||
func (c *Context) SaveUploadedFile(file *multipart.FileHeader, dst string, perm ...fs.FileMode) error {
|
func (c *Context) SaveUploadedFile(file *multipart.FileHeader, dst string, perm ...fs.FileMode) error {
|
||||||
src, err := file.Open()
|
src, err := file.Open()
|
||||||
@ -736,16 +746,9 @@ func (c *Context) SaveUploadedFile(file *multipart.FileHeader, dst string, perm
|
|||||||
mode = perm[0]
|
mode = perm[0]
|
||||||
}
|
}
|
||||||
dir := filepath.Dir(dst)
|
dir := filepath.Dir(dst)
|
||||||
dirExisted := dirExists(dir)
|
|
||||||
if err = os.MkdirAll(dir, mode); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
// Only chmod newly created directories. Attempting to chmod
|
// Only chmod newly created directories. Attempting to chmod
|
||||||
// pre-existing directories (e.g. /tmp) may fail with EPERM.
|
// pre-existing directories (e.g. /tmp) may fail with EPERM.
|
||||||
if !dirExisted {
|
if err = ensureDirWithMode(dir, mode); err != nil {
|
||||||
err = os.Chmod(dir, mode)
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user