|
5 | 5 | on the request, such as form content or json encoded data. |
6 | 6 | """ |
7 | 7 | import codecs |
8 | | -from urllib import parse |
9 | 8 |
|
10 | 9 | from django.conf import settings |
11 | 10 | from django.core.files.uploadhandler import StopFutureHandlers |
12 | 11 | from django.http import QueryDict |
13 | 12 | from django.http.multipartparser import ChunkIter |
14 | 13 | from django.http.multipartparser import \ |
15 | 14 | MultiPartParser as DjangoMultiPartParser |
16 | | -from django.http.multipartparser import MultiPartParserError, parse_header |
17 | | -from django.utils.encoding import force_str |
| 15 | +from django.http.multipartparser import MultiPartParserError |
18 | 16 |
|
19 | 17 | from rest_framework import renderers |
| 18 | +from rest_framework.compat import parse_header_parameters |
20 | 19 | from rest_framework.exceptions import ParseError |
21 | 20 | from rest_framework.settings import api_settings |
22 | 21 | from rest_framework.utils import json |
@@ -201,23 +200,10 @@ def get_filename(self, stream, media_type, parser_context): |
201 | 200 |
|
202 | 201 | try: |
203 | 202 | meta = parser_context['request'].META |
204 | | - disposition = parse_header(meta['HTTP_CONTENT_DISPOSITION'].encode()) |
205 | | - filename_parm = disposition[1] |
206 | | - if 'filename*' in filename_parm: |
207 | | - return self.get_encoded_filename(filename_parm) |
208 | | - return force_str(filename_parm['filename']) |
| 203 | + disposition, params = parse_header_parameters(meta['HTTP_CONTENT_DISPOSITION']) |
| 204 | + if 'filename*' in params: |
| 205 | + return params['filename*'] |
| 206 | + else: |
| 207 | + return params['filename'] |
209 | 208 | except (AttributeError, KeyError, ValueError): |
210 | 209 | pass |
211 | | - |
212 | | - def get_encoded_filename(self, filename_parm): |
213 | | - """ |
214 | | - Handle encoded filenames per RFC6266. See also: |
215 | | - https://tools.ietf.org/html/rfc2231#section-4 |
216 | | - """ |
217 | | - encoded_filename = force_str(filename_parm['filename*']) |
218 | | - try: |
219 | | - charset, lang, filename = encoded_filename.split('\'', 2) |
220 | | - filename = parse.unquote(filename) |
221 | | - except (ValueError, LookupError): |
222 | | - filename = force_str(filename_parm['filename']) |
223 | | - return filename |
0 commit comments