diff --git a/files/file.go b/files/file.go index a077b062..5372246c 100644 --- a/files/file.go +++ b/files/file.go @@ -24,6 +24,7 @@ import ( ) const PERM = 0664 +const DIR_PERM = 0755 // FileInfo describes a file. type FileInfo struct { diff --git a/http/tus_handlers.go b/http/tus_handlers.go index 8df38d4b..04ea1202 100644 --- a/http/tus_handlers.go +++ b/http/tus_handlers.go @@ -6,6 +6,7 @@ import ( "io" "net/http" "os" + "path/filepath" "strconv" "github.com/spf13/afero" @@ -28,6 +29,13 @@ func tusPostHandler() handleFunc { if !d.user.Perm.Create || !d.Check(r.URL.Path) { return http.StatusForbidden, nil } + + dirPath := filepath.Dir(r.URL.Path) + if _, statErr := d.user.Fs.Stat(dirPath); os.IsNotExist(statErr) { + if mkdirErr := d.user.Fs.MkdirAll(dirPath, files.DIR_PERM); mkdirErr != nil { + return http.StatusInternalServerError, err + } + } case err != nil: return errToStatus(err), err }