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.

Reply via email to