#20948: Form ImageField, MemoryFileUploadHandler and reading content of the
InMemoryUploadedFile
---------------------------------+-------------------------
     Reporter:  p_hrechyshkin@…  |      Owner:  nobody
         Type:  Uncategorized    |     Status:  new
    Component:  Python 2         |    Version:  1.4
     Severity:  Normal           |   Keywords:  file upload
 Triage Stage:  Unreviewed       |  Has patch:  0
Easy pickings:  0                |      UI/UX:  0
---------------------------------+-------------------------
 There is a form with ImageField, which returns validation error

     "Upload a valid image. The file you uploaded was either not an image
 or a corrupted image."

 In my view I am trying to read image file content:

     image = self.request.FILES.get('image')
     if image:
         content = "".join(image.chunks())
 Validation error doesn't occur if I comment line with image.chunks(), also
 it isn't showed if I remove
 "django.core.files.uploadhandler.MemoryFileUploadHandler" from
 FILE_UPLOAD_HANDLERS setting.

 So the reason could be in file object created by MemoryFileUploadHandler
 (InMemoryUploadedFile).

 My guess was it could be that after read there is no call file.seek(0)
 which set file reader pointer to the begging of the file.

 It could be ImageFile.to_python assumes that pointer set to the beginning.
 In ImageField.to_python I have added

     data.file.seek(0)
 before

     file = StringIO(data.read())
 and I haven't got image validation error after that.

 Is it proper behavior? Or ImageField shouldn't assume that file haven't
 been read? Or InMemoryUploadedFile should call file.seek(0) after chunks
 iterator ended its work?

-- 
Ticket URL: <https://code.djangoproject.com/ticket/20948>
Django <https://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 unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/070.4d160765d43f1bc1e8bdca36b1900a13%40djangoproject.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to