[Django] #20948: Form ImageField, MemoryFileUploadHandler and reading content of the InMemoryUploadedFile

146 views
Skip to first unread message

Django

unread,
Aug 21, 2013, 5:08:25 AM8/21/13
to django-...@googlegroups.com
#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.

Django

unread,
Aug 22, 2013, 2:53:05 AM8/22/13
to django-...@googlegroups.com
#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 | Resolution:

Keywords: file upload | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------
Changes (by apollo13):

* needs_better_patch: => 0
* needs_tests: => 0
* needs_docs: => 0


Comment:

You are supposed to call `image.seek(0)` yourself after you read from it.
That said, it would be intresting to know why it works for
`TemporaryUploadedFile`

--
Ticket URL: <https://code.djangoproject.com/ticket/20948#comment:1>

Django

unread,
Sep 6, 2013, 11:56:37 AM9/6/13
to django-...@googlegroups.com
#20948: Form ImageField, MemoryFileUploadHandler and reading content of the
InMemoryUploadedFile
---------------------------------+--------------------------------------
Reporter: p_hrechyshkin@… | Owner: sduveen
Type: Uncategorized | Status: assigned

Component: Python 2 | Version: 1.4
Severity: Normal | Resolution:

Keywords: file upload | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------
Changes (by sduveen):

* owner: nobody => sduveen
* status: new => assigned


--
Ticket URL: <https://code.djangoproject.com/ticket/20948#comment:2>

Django

unread,
Sep 6, 2013, 12:05:43 PM9/6/13
to django-...@googlegroups.com
#20948: Form ImageField, MemoryFileUploadHandler and reading content of the
InMemoryUploadedFile
---------------------------------+--------------------------------------
Reporter: p_hrechyshkin@… | Owner:

Type: Uncategorized | Status: new
Component: Python 2 | Version: 1.4
Severity: Normal | Resolution:

Keywords: file upload | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------
Changes (by sduveen):

* status: assigned => new
* owner: sduveen =>


--
Ticket URL: <https://code.djangoproject.com/ticket/20948#comment:3>

Django

unread,
Oct 22, 2013, 2:50:37 PM10/22/13
to django-...@googlegroups.com
#20948: Form ImageField, MemoryFileUploadHandler and reading content of the
InMemoryUploadedFile
---------------------------------+--------------------------------------
Reporter: p_hrechyshkin@… | Owner:
Type: Uncategorized | Status: closed

Component: Python 2 | Version: 1.4
Severity: Normal | Resolution: invalid

Keywords: file upload | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------
Changes (by timo):

* status: new => closed
* resolution: => invalid


--
Ticket URL: <https://code.djangoproject.com/ticket/20948#comment:4>

Reply all
Reply to author
Forward
0 new messages