Author: jezdez Date: 2011-05-07 09:59:16 -0700 (Sat, 07 May 2011) New Revision: 16176
Modified: django/trunk/django/http/multipartparser.py django/trunk/tests/regressiontests/file_uploads/tests.py django/trunk/tests/regressiontests/file_uploads/urls.py django/trunk/tests/regressiontests/file_uploads/views.py Log: Fixed #15496 -- Corrected handling of base64 file upload encoding. Thanks, gene and Claude Paroz. Modified: django/trunk/django/http/multipartparser.py =================================================================== --- django/trunk/django/http/multipartparser.py 2011-05-07 16:59:08 UTC (rev 16175) +++ django/trunk/django/http/multipartparser.py 2011-05-07 16:59:16 UTC (rev 16176) @@ -145,6 +145,8 @@ continue transfer_encoding = meta_data.get('content-transfer-encoding') + if transfer_encoding is not None: + transfer_encoding = transfer_encoding[0].strip() field_name = force_unicode(field_name, encoding, errors='replace') if item_type == FIELD: Modified: django/trunk/tests/regressiontests/file_uploads/tests.py =================================================================== --- django/trunk/tests/regressiontests/file_uploads/tests.py 2011-05-07 16:59:08 UTC (rev 16175) +++ django/trunk/tests/regressiontests/file_uploads/tests.py 2011-05-07 16:59:16 UTC (rev 16176) @@ -1,5 +1,6 @@ #! -*- coding: utf-8 -*- +import base64 import errno import hashlib import os @@ -56,6 +57,30 @@ self.assertEqual(response.status_code, 200) + def test_base64_upload(self): + test_string = "This data will be transmitted base64-encoded." + payload = "\r\n".join([ + '--' + client.BOUNDARY, + 'Content-Disposition: form-data; name="file"; filename="test.txt"', + 'Content-Type: application/octet-stream', + 'Content-Transfer-Encoding: base64', + '', + base64.b64encode(test_string), + '--' + client.BOUNDARY + '--', + '', + ]) + r = { + 'CONTENT_LENGTH': len(payload), + 'CONTENT_TYPE': client.MULTIPART_CONTENT, + 'PATH_INFO': "/file_uploads/echo_content/", + 'REQUEST_METHOD': 'POST', + 'wsgi.input': client.FakePayload(payload), + } + response = self.client.request(**r) + received = simplejson.loads(response.content) + + self.assertEqual(received['file'], test_string) + def test_unicode_file_name(self): tdir = tempfile.gettempdir() Modified: django/trunk/tests/regressiontests/file_uploads/urls.py =================================================================== --- django/trunk/tests/regressiontests/file_uploads/urls.py 2011-05-07 16:59:08 UTC (rev 16175) +++ django/trunk/tests/regressiontests/file_uploads/urls.py 2011-05-07 16:59:16 UTC (rev 16176) @@ -6,6 +6,7 @@ (r'^verify/$', views.file_upload_view_verify), (r'^unicode_name/$', views.file_upload_unicode_name), (r'^echo/$', views.file_upload_echo), + (r'^echo_content/$', views.file_upload_echo_content), (r'^quota/$', views.file_upload_quota), (r'^quota/broken/$', views.file_upload_quota_broken), (r'^getlist_count/$', views.file_upload_getlist_count), Modified: django/trunk/tests/regressiontests/file_uploads/views.py =================================================================== --- django/trunk/tests/regressiontests/file_uploads/views.py 2011-05-07 16:59:08 UTC (rev 16175) +++ django/trunk/tests/regressiontests/file_uploads/views.py 2011-05-07 16:59:16 UTC (rev 16176) @@ -85,6 +85,13 @@ r = dict([(k, f.name) for k, f in request.FILES.items()]) return HttpResponse(simplejson.dumps(r)) +def file_upload_echo_content(request): + """ + Simple view to echo back the content of uploaded files for tests. + """ + r = dict([(k, f.read()) for k, f in request.FILES.items()]) + return HttpResponse(simplejson.dumps(r)) + def file_upload_quota(request): """ Dynamically add in an upload handler. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-updates@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-updates?hl=en.