refactor: cover directory setup helper

This commit is contained in:
Herrtian 2026-05-22 13:35:04 +02:00
parent eea9cbc48e
commit 2ac84ddd38

View File

@ -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
} }