Commit bcd8a24d by Jason Bittel

Refactor encoded filename feature per #1531

parent bcca9ed0
...@@ -289,18 +289,22 @@ class FileUploadParser(BaseParser): ...@@ -289,18 +289,22 @@ class FileUploadParser(BaseParser):
try: try:
meta = parser_context['request'].META meta = parser_context['request'].META
disposition = parse_header(meta['HTTP_CONTENT_DISPOSITION'].encode('utf-8')) disposition = parse_header(meta['HTTP_CONTENT_DISPOSITION'].encode('utf-8'))[1]
if 'filename*' in disposition:
return self.get_encoded_filename(disposition)
return force_text(disposition['filename'])
except (AttributeError, KeyError):
pass
if 'filename*' in disposition[1]: def get_encoded_filename(self, disposition):
filename_encoded = force_text(disposition[1]['filename*']) """
Handle encoded filenames per RFC6266. See also:
http://tools.ietf.org/html/rfc2231#section-4
"""
encoded_filename = force_text(disposition['filename*'])
try: try:
charset, filename_encoded = filename_encoded.split('\'\'', 1) charset, filename = encoded_filename.split('\'\'', 1)
filename = urlparse.unquote(filename_encoded) filename = urlparse.unquote(filename)
except (ValueError, LookupError): except (ValueError, LookupError):
filename = force_text(disposition[1]['filename']) filename = force_text(disposition['filename'])
else:
filename = force_text(disposition[1]['filename'])
return filename return filename
except (AttributeError, KeyError):
pass
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment