From 5bed4e139693a7d93b53183d4f4061dd9d141432 Mon Sep 17 00:00:00 2001 From: Dennis-Florian Herr Date: Sat, 22 Nov 2025 00:54:52 +0100 Subject: [PATCH] allow larger upload The tornado upload handler fails for larger files. In my case a 350mb log couldn't get uploaded. Setting `connection.set_max_body_size` appropriately fixed the issue. This MR sets this to either expected size, 10% over content-length if not provided or at least 500mb. --- app/tornado_handlers/upload.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/app/tornado_handlers/upload.py b/app/tornado_handlers/upload.py index 3978873f..517311ee 100644 --- a/app/tornado_handlers/upload.py +++ b/app/tornado_handlers/upload.py @@ -94,8 +94,18 @@ def prepare(self): int(self.get_argument('expected_size'))) try: total = int(self.request.headers.get("Content-Length", "0")) - except KeyError: - total = 0 + except (KeyError, ValueError): + total = 0 + # Set max body size based on Content-Length or expected_size parameter + if 'expected_size' in self.request.arguments: + max_size = int(self.get_argument('expected_size')) + elif total > 0: + # Add 10% buffer for multipart overhead + max_size = int(total * 1.1) + else: + # Default to 500MB if no size info available + max_size = 500 * 1024 * 1024 + self.request.connection.set_max_body_size(max_size) self.multipart_streamer = MultiPartStreamer(total) def data_received(self, chunk): @@ -344,4 +354,3 @@ def post(self, *args, **kwargs): finally: self.multipart_streamer.release_parts() -