#8421: FileField traps error when uploading non-ascii filename
------------------------------------+---------------------------------------
 Reporter:  mizutori                |       Owner:  nobody    
   Status:  new                     |   Milestone:  1.0       
Component:  Forms                   |     Version:  1.0-beta-1
 Keywords:  FileField upload files  |       Stage:  Unreviewed
Has_patch:  0                       |  
------------------------------------+---------------------------------------
 Uploading non-ascii filename causes error by UnicodeEncodeError.

 If the form has two (or more) input fields for uploading files,
 and if you fill in either field by non-ascii filename and the other
 field empty, then an UnicodeEncodeError occurs when is_valid() is invoked.

 To the contrary, no error occurs when
 (1) the form has only one input field and fill it by non-ascii filename,
 (2) or the form has two (or more) input fields and fill them all by
 filenames.
 (3) or fill one or more input field(s) by ascii filename(s)

 I wonder why the error occurs only on condition that
 (4) the form has two (or more) input fields and one field is filled by
 non-ascii filename and the other field(s) is/are kept empty.


 [1] source code

 ---[ views.py ]---
 class UploadForm(forms.Form):
   attach_1 = forms.FileField(required = False)
   attach_2 = forms.FileField(required = False)

 def test_upload(self,request):
   if request.method == 'POST':
     formup = UploadForm(request.POST,request.FILES)
     if formup.is_valid():
       result = self.handle_uploaded_file(request.FILES)
       return HttpResponseRedirect('result.html')
 ---
 * the form page is encoded in UTF-8.

 [2] error message

 UnicodeEncodeError at /mysite1/debug/upload.html
 'ascii' codec can't encode characters in position 37-39: ordinal not in
 range(128)

 Unicode error hint
 The string that could not be encoded/decoded was: NON-ASCII-UPLOAD-
 FILENAME

 [3] traceback message

 Traceback:
 File "/usr/lib/python25/Lib/site-packages/django/core/handlers/base.py" in
 get_response
  86. response = callback(request, *callback_args, **callback_kwargs)
 File "/mysite1/debug/views.py" in upload
  70. return MyDebug.toolbox.test_upload(request)
 File "/mysite1/debug/util_mysite_debug.py" in test_upload
  177. if formup.is_valid():
 File "/usr/lib/python25/Lib/site-packages/django/forms/forms.py" in
 is_valid
  120. return self.is_bound and not bool(self.errors)
 File "/usr/lib/python25/Lib/site-packages/django/forms/forms.py" in
 _get_errors
  111. self.full_clean()
 File "/usr/lib/python25/Lib/site-packages/django/forms/forms.py" in
 full_clean
  212. value = field.widget.value_from_datadict(self.data, self.files,
 self.add_prefix(name))
 File "/usr/lib/python25/Lib/site-packages/django/forms/widgets.py" in
 value_from_datadict
  266. return files.get(name, None)
 File "/usr/lib/python25/Lib/site-packages/django/utils/datastructures.py"
 in get
  227. val = self[key]
 File "/usr/lib/python25/Lib/site-packages/django/utils/datastructures.py"
 in __getitem__
  198. raise MultiValueDictKeyError, "Key %r not found in %r" % (key, self)
 File "/usr/lib/python25/Lib/site-packages/django/utils/datastructures.py"
 in __repr__
  188. super(MultiValueDict, self).__repr__())

 Exception Type: UnicodeEncodeError at /mysite1/debug/upload.html
 Exception Value: 'ascii' codec can't encode characters in position 37-39:
 ordinal not in range(128)

-- 
Ticket URL: <http://code.djangoproject.com/ticket/8421>
Django Code <http://code.djangoproject.com/>
The web framework for perfectionists with deadlines
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to