diff --git a/files/file.go b/files/file.go index a077b062..051259a0 100644 --- a/files/file.go +++ b/files/file.go @@ -24,6 +24,7 @@ import ( ) const PERM = 0664 +const DirPERM = 0755 // FileInfo describes a file. type FileInfo struct { diff --git a/http/tus_handlers.go b/http/tus_handlers.go index 8df38d4b..d8e88d02 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 _, err := d.user.Fs.Stat(dirPath); os.IsNotExist(err) { + if err := d.user.Fs.MkdirAll(dirPath, 0755); err != nil { + return http.StatusInternalServerError, err + } + } case err != nil: return errToStatus(err), err }