From 7ff36a2fd28fe2a536f2dd0f25be492a0182fb1b Mon Sep 17 00:00:00 2001 From: Arksine Date: Tue, 14 Jul 2020 17:10:43 -0400 Subject: [PATCH] app: Add support for the "path" form argument to the Upload Handler Signed-off-by: Eric Callahan --- moonraker/app.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/moonraker/app.py b/moonraker/app.py index 4fc3362..e482080 100644 --- a/moonraker/app.py +++ b/moonraker/app.py @@ -352,11 +352,17 @@ class FileUploadHandler(AuthorizedRequestHandler): async def post(self): start_print = False + dir_path = "" print_args = self.request.arguments.get('print', []) + path_args = self.request.arguments.get('path', []) if print_args: - start_print = print_args[0].lower() == "true" + start_print = print_args[0].decode().lower() == "true" + if path_args: + dir_path = path_args[0].decode().lstrip("/") upload = self.get_file() - filename = "_".join(upload['filename'].strip().split()) + filename = "_".join(upload['filename'].strip().split()).lstrip("/") + if dir_path: + filename = os.path.join(dir_path, filename) full_path = os.path.join(self.file_path, filename) # Make sure the file isn't currently loaded ongoing = False @@ -375,6 +381,8 @@ class FileUploadHandler(AuthorizedRequestHandler): # Don't start if another print is currently in progress start_print = start_print and not ongoing try: + if dir_path: + os.makedirs(os.path.dirname(full_path), exist_ok=True) with open(full_path, 'wb') as fh: fh.write(upload['body']) self.server.notify_filelist_changed(filename, 'added')