From 5490480906cf48360629baa68b55e517ff3621b6 Mon Sep 17 00:00:00 2001 From: Fran Boon Date: Mon, 13 Apr 2020 16:57:36 +0100 Subject: [PATCH] Workaround Python 3.x CGI bug which causes #2262 Obviously the client also needs to send a Content-Disposition header for this to work --- gluon/globals.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/gluon/globals.py b/gluon/globals.py index b98fe306..43a28e45 100644 --- a/gluon/globals.py +++ b/gluon/globals.py @@ -242,7 +242,15 @@ class Request(Storage): # parse POST variables on POST, PUT, BOTH only in post_vars if body and not is_json and env.request_method in ('POST', 'PUT', 'DELETE', 'BOTH'): query_string = env.pop('QUERY_STRING', None) - dpost = cgi.FieldStorage(fp=body, environ=env, keep_blank_values=1) + content_disposition = env.get('HTTP_CONTENT_DISPOSITION') + if content_disposition: + headers = {'content-disposition': content_disposition, + 'content-type': env['CONTENT_TYPE'], + 'content-length': env['CONTENT_LENGTH'], + } + else: + headers = None + dpost = cgi.FieldStorage(fp=body, environ=env, headers=headers, keep_blank_values=1) try: post_vars.update(dpost) except: