Merge pull request #1109 from DirkGuijt/master
fixed bug in multipart/form-data parser
This commit is contained in:
commit
6d37ef7256
|
@ -18,7 +18,7 @@ except ImportError:
|
||||||
json_loads = json.loads
|
json_loads = json.loads
|
||||||
|
|
||||||
from sanic.exceptions import InvalidUsage
|
from sanic.exceptions import InvalidUsage
|
||||||
from sanic.log import error_logger
|
from sanic.log import error_logger, logger
|
||||||
|
|
||||||
DEFAULT_HTTP_CONTENT_TYPE = "application/octet-stream"
|
DEFAULT_HTTP_CONTENT_TYPE = "application/octet-stream"
|
||||||
|
|
||||||
|
@ -284,7 +284,8 @@ def parse_multipart_form(body, boundary):
|
||||||
form_parts = body.split(boundary)
|
form_parts = body.split(boundary)
|
||||||
for form_part in form_parts[1:-1]:
|
for form_part in form_parts[1:-1]:
|
||||||
file_name = None
|
file_name = None
|
||||||
file_type = None
|
content_type = 'text/plain'
|
||||||
|
content_charset = 'utf-8'
|
||||||
field_name = None
|
field_name = None
|
||||||
line_index = 2
|
line_index = 2
|
||||||
line_end_index = 0
|
line_end_index = 0
|
||||||
|
@ -302,24 +303,30 @@ def parse_multipart_form(body, boundary):
|
||||||
form_line[colon_index + 2:])
|
form_line[colon_index + 2:])
|
||||||
|
|
||||||
if form_header_field == 'content-disposition':
|
if form_header_field == 'content-disposition':
|
||||||
if 'filename' in form_parameters:
|
file_name = form_parameters.get('filename')
|
||||||
file_name = form_parameters['filename']
|
|
||||||
field_name = form_parameters.get('name')
|
field_name = form_parameters.get('name')
|
||||||
elif form_header_field == 'content-type':
|
elif form_header_field == 'content-type':
|
||||||
file_type = form_header_value
|
content_type = form_header_value
|
||||||
|
content_charset = form_parameters.get('charset', 'utf-8')
|
||||||
|
|
||||||
post_data = form_part[line_index:-4]
|
if field_name:
|
||||||
if file_name or file_type:
|
post_data = form_part[line_index:-4]
|
||||||
file = File(type=file_type, name=file_name, body=post_data)
|
if file_name:
|
||||||
if field_name in files:
|
form_file = File(type=content_type,
|
||||||
files[field_name].append(file)
|
name=file_name,
|
||||||
|
body=post_data)
|
||||||
|
if field_name in files:
|
||||||
|
files[field_name].append(form_file)
|
||||||
|
else:
|
||||||
|
files[field_name] = [form_file]
|
||||||
else:
|
else:
|
||||||
files[field_name] = [file]
|
value = post_data.decode(content_charset)
|
||||||
|
if field_name in fields:
|
||||||
|
fields[field_name].append(value)
|
||||||
|
else:
|
||||||
|
fields[field_name] = [value]
|
||||||
else:
|
else:
|
||||||
value = post_data.decode('utf-8')
|
logger.debug('Form-data field does not have a \'name\' parameter \
|
||||||
if field_name in fields:
|
in the Content-Disposition header')
|
||||||
fields[field_name].append(value)
|
|
||||||
else:
|
|
||||||
fields[field_name] = [value]
|
|
||||||
|
|
||||||
return fields, files
|
return fields, files
|
||||||
|
|
Loading…
Reference in New Issue
Block a user