From 77a6d260a163d2dbdb22f060d98fa359787d26ef Mon Sep 17 00:00:00 2001 From: Andrew Date: Fri, 20 Aug 2021 15:41:22 -0400 Subject: [PATCH] Made it so a new thread is spawned for uploads. Need to add file checking so system doesn't crash when a user tries to upload a dmg or a .mov --- app/classes/web/ajax_handler.py | 34 ++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/app/classes/web/ajax_handler.py b/app/classes/web/ajax_handler.py index cbf7c9e6..f051c956 100644 --- a/app/classes/web/ajax_handler.py +++ b/app/classes/web/ajax_handler.py @@ -1,6 +1,7 @@ import json import logging import tempfile +import threading import zipfile import tornado.web @@ -196,25 +197,28 @@ class AjaxHandler(BaseHandler): self.redirect("/panel/server_detail?id={}&subpage=files".format(server_id)) return - elif page == "upload_files": server_id = self.get_argument('id', None) path = self.get_argument('path', None) + files = self.request.files['files'] + upload_thread = threading.Thread(target=self.do_upload, daemon=True, name=files[0]['filename'], + args=(server_id, path, files)) + upload_thread.start() + self.redirect("/panel/server_detail?id={}&subpage=files".format(server_id)) - if helper.in_path(db_helper.get_server_data_by_id(server_id)['path'], path): - try: - files = self.request.files['files'] - for file in files: - if file['filename'].split('.') is not None: - self._upload_file(file['body'], path, file['filename']) - else: - logger.error("Directory Detected. Skipping") - self.redirect("/panel/server_detail?id={}&subpage=files".format(server_id)) - except Exception as e: - self.redirect("/panel/server_detail?id={}&subpage=files".format(server_id)) - else: - logger.error("Invalid directory requested. Canceling upload") - return + def do_upload(self, server_id, path, files): + if helper.in_path(db_helper.get_server_data_by_id(server_id)['path'], path): + try: + for file in files: + if file['filename'].split('.') is not None: + self._upload_file(file['body'], path, file['filename']) + else: + logger.error("Directory Detected. Skipping") + except Exception as e: + logger.error("Error while uploading files: {}".format(e)) + else: + logger.error("Invalid directory requested. Canceling upload") + return def _upload_file(self, file_data, file_path, file_name): error = ""