Added get filename as encoded

This filename described in RFC 6266
This commit is contained in:
Vladislav Vlastovskiy 2014-04-14 14:18:10 +04:00
parent b3b0515ae6
commit 4f0f3754cf

View File

@ -10,7 +10,7 @@ from django.core.files.uploadhandler import StopFutureHandlers
from django.http import QueryDict
from django.http.multipartparser import MultiPartParser as DjangoMultiPartParser
from django.http.multipartparser import MultiPartParserError, parse_header, ChunkIter
from rest_framework.compat import etree, six, yaml, force_text
from rest_framework.compat import etree, six, yaml, force_text, urlparse
from rest_framework.exceptions import ParseError
from rest_framework import renderers
import json
@ -289,6 +289,17 @@ class FileUploadParser(BaseParser):
try:
meta = parser_context['request'].META
disposition = parse_header(meta['HTTP_CONTENT_DISPOSITION'].encode('utf-8'))
return force_text(disposition[1]['filename'])
filename = force_text(disposition[1]['filename'])
if 'filename*' in disposition[1]:
filename_encoded = force_text(disposition[1]['filename*'])
try:
charset, filename_encoded = filename_encoded.split('\'\'', 1)
filename = urlparse.unquote(filename_encoded, charset)
except (ValueError, LookupError):
pass
return filename
except (AttributeError, KeyError):
pass