diff --git a/deploy/convert_server.py b/deploy/convert_server.py index 261cb4f..399d404 100755 --- a/deploy/convert_server.py +++ b/deploy/convert_server.py @@ -286,16 +286,19 @@ class Handler(BaseHTTPRequestHandler): length = int(self.headers.get("Content-Length", 0)) body = self.rfile.read(length) - # Парсим multipart через email.parser - msg = BytesParser().parsebytes( - b"Content-Type: " + content_type.encode() + b"\r\n\r\n" + body - ) - zip_data = None - if msg.is_multipart(): - for part in msg.get_payload(): - if part.get_filename(): - zip_data = part.get_payload(decode=True) - break + # Raw binary (браузер) или multipart (curl fallback) + if "multipart" in content_type: + msg = BytesParser().parsebytes( + b"Content-Type: " + content_type.encode() + b"\r\n\r\n" + body + ) + zip_data = None + if msg.is_multipart(): + for part in msg.get_payload(): + if part.get_filename(): + zip_data = part.get_payload(decode=True) + break + else: + zip_data = body else: zip_data = body diff --git a/deploy/nginx-contracts.conf b/deploy/nginx-contracts.conf index 99291b1..a649610 100644 --- a/deploy/nginx-contracts.conf +++ b/deploy/nginx-contracts.conf @@ -44,10 +44,14 @@ server { } location /unzip-upload { + if ($request_method = OPTIONS) { + add_header Access-Control-Allow-Origin "*"; + add_header Access-Control-Allow-Methods "POST, OPTIONS"; + add_header Access-Control-Allow-Headers "*"; + add_header Content-Length 0; + return 204; + } add_header Access-Control-Allow-Origin "*"; - add_header Access-Control-Allow-Methods "POST, OPTIONS"; - add_header Access-Control-Allow-Headers "*"; - if ($request_method = OPTIONS) { return 200; } proxy_pass http://127.0.0.1:8766; client_max_body_size 100m; } diff --git a/index.cfm b/index.cfm index 2a6426e..7854055 100644 --- a/index.cfm +++ b/index.cfm @@ -75,7 +75,7 @@