From 7a3202c99619dc3686407e14d776bdbf16ebb10b Mon Sep 17 00:00:00 2001 From: kqjy Date: Sun, 22 Mar 2026 11:27:52 +0800 Subject: [PATCH] Possible fix for the issue --- app/__init__.py | 60 ++++++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index 359f459..015e16d 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -55,21 +55,44 @@ class _ChunkedTransferMiddleware: if environ.get("REQUEST_METHOD") not in ("PUT", "POST"): return self.app(environ, start_response) - sha256 = environ.get("HTTP_X_AMZ_CONTENT_SHA256", "") - decoded_len = environ.get("HTTP_X_AMZ_DECODED_CONTENT_LENGTH", "") - content_encoding = environ.get("HTTP_CONTENT_ENCODING", "") transfer_encoding = environ.get("HTTP_TRANSFER_ENCODING", "") content_length = environ.get("CONTENT_LENGTH") - is_streaming = ( - "STREAMING" in sha256.upper() - or decoded_len - or "aws-chunked" in content_encoding.lower() - or "chunked" in transfer_encoding.lower() - ) + if "chunked" in transfer_encoding.lower(): + if content_length: + del environ["HTTP_TRANSFER_ENCODING"] + else: + raw = environ.get("wsgi.input") + if raw: + try: + if hasattr(raw, "seek"): + raw.seek(0) + body = raw.read() + except Exception: + body = b"" + if body: + environ["wsgi.input"] = io.BytesIO(body) + environ["CONTENT_LENGTH"] = str(len(body)) + del environ["HTTP_TRANSFER_ENCODING"] - if not is_streaming: - return self.app(environ, start_response) + content_length = environ.get("CONTENT_LENGTH") + if not content_length or content_length == "0": + sha256 = environ.get("HTTP_X_AMZ_CONTENT_SHA256", "") + decoded_len = environ.get("HTTP_X_AMZ_DECODED_CONTENT_LENGTH", "") + content_encoding = environ.get("HTTP_CONTENT_ENCODING", "") + if ("STREAMING" in sha256.upper() or decoded_len + or "aws-chunked" in content_encoding.lower()): + raw = environ.get("wsgi.input") + if raw: + try: + if hasattr(raw, "seek"): + raw.seek(0) + body = raw.read() + except Exception: + body = b"" + if body: + environ["wsgi.input"] = io.BytesIO(body) + environ["CONTENT_LENGTH"] = str(len(body)) raw = environ.get("wsgi.input") if raw and hasattr(raw, "seek"): @@ -78,21 +101,6 @@ class _ChunkedTransferMiddleware: except Exception: pass - cl_int = 0 - try: - cl_int = int(content_length) if content_length else 0 - except (ValueError, TypeError): - pass - - if cl_int <= 0: - try: - body = raw.read() if raw else b"" - except Exception: - body = b"" - if body: - environ["wsgi.input"] = io.BytesIO(body) - environ["CONTENT_LENGTH"] = str(len(body)) - return self.app(environ, start_response)