Electronics & Programming

develissimo

Open Source electronics development and programming

  • You are not logged in.
  • Root
  • » Django
  • » Process UploadedFile with PIL on-the-fly [RSS Feed]

#1 Dec. 2, 2010 12:22:52

m.
Registered: 2009-11-02
Reputation: +  0  -
Profile   Send e-mail  

Process UploadedFile with PIL on-the-fly


Hi! I need to resize and make a stamp on uploaded images and only then
save a model.
I have a procedure, that processes incoming File:

def processUploadedImage(file):
img = Image.open(file)
downsampleUploadedimage(img)
stampUploadedImage(img)
img.save(file, "JPEG")

I tried to process UploadedFile directly from request.FILES, before
constructing and validating form:

...
processUploadedImage(request.FILES)
form = ImageUpload(request.POST, request.FILES)
if form.is_valid(): #it always fails here, is_valid returns False,
if
I process UploadedFile
...
else:
redirect('/failed')
...

After it failed, I also tried to process it in my ImageUpload.save()
method:
class ImageUpload(forms.ModelForm):
class Meta:
model = Image
fields =

def save(self,user,commit=True,**params):
image = forms.ModelForm.save(self,commit=False)#construct an
instance from form fields
processUploadedImage(image.file)

...another fields initialization, such as user,
publication_date and
so on...

#save into db(if commit is True) and return model instance
return forms.models.save_instance(self, image,
commit,construct=False)
but it fails, when processUploadedImage tries to save image into file.
It trows IOError "Bad file descriptor"..

I know that I can process image after it saved into db, but I dont
want server to do unnecessary work:
read full sized file, copy it into storage, then again open file in
starage, process it, save...

I want beautyfull solution :)
Upload -> Process ->Construct model -> Save

--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to
django-users+unsubscr...@googlegroups.com.
For more options, visit this group athttp://groups.google.com/group/django-users?hl=en.

Offline

#2 Dec. 2, 2010 16:55:33

w.
Registered: 2009-11-02
Reputation: +  0  -
Profile   Send e-mail  

Process UploadedFile with PIL on-the-fly


On Dec 2, 4:40 am, muzhig <arseniy.pota...@gmail.com> wrote:
> Hi! I need to resize and make a stamp on uploaded images and only then
> save a model.
> I have a procedure, that processes incoming File:
>
> def processUploadedImage(file):
>         img = Image.open(file)
>         downsampleUploadedimage(img)
>         stampUploadedImage(img)
>         img.save(file, "JPEG")
>
> I tried to process UploadedFile directly from request.FILES, before
> constructing and validating form:
>
>         ...
>         processUploadedImage(request.FILES)
>         form = ImageUpload(request.POST, request.FILES)
>         if form.is_valid():     #it always fails here, is_valid returns
> False, if
> I process UploadedFile
>                 ...
>         else:
>                 redirect('/failed')
>         ...
>
> After it failed, I also tried to process it in my ImageUpload.save()
> method:
> class ImageUpload(forms.ModelForm):
>         class Meta:
>                 model = Image
>                 fields =
>
>         def save(self,user,commit=True,**params):
>                 image = forms.ModelForm.save(self,commit=False)#construct an
> instance from form fields
>                 processUploadedImage(image.file)
>
>                 ...another fields initialization, such as user,
> publication_date and
> so on...
>
>                 #save into db(if commit is True) and return model instance
>                 return forms.models.save_instance(self, image,
> commit,construct=False)
> but it fails, when processUploadedImage tries to save image into file.
> It trows IOError "Bad file descriptor"..
>
> I know that I can process image after it saved into db, but I dont
> want server to do unnecessary work:
> read full sized file, copy it into storage, then again open file in
> starage, process it, save...
>
> I want beautyfull solution :)
> Upload -> Process ->Construct model -> Save

This, to me, is a perfect use case for a signal, most likely
pre_save. I am still not sure if you wish to save the original or the
processed image in your model, but you can do either by moving any
processing code to a method that gets triggered right before Django
tries to save your model. You don't need to override the save()
method of your model, but you could do it there, too, if you wish.

However, it looks like you are trying to do it by overriding the
save() method of your ModelForm, which I would not do in this case,
although you could make it work. The data you are trying to
manipulate has nothing to do with the form itself, or other fields in
the form, and thus (I think) would be better to do in one of the other
places I mentioned above.

--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to
django-users+unsubscr...@googlegroups.com.
For more options, visit this group athttp://groups.google.com/group/django-users?hl=en.

Offline

  • Root
  • » Django
  • » Process UploadedFile with PIL on-the-fly [RSS Feed]

Board footer

Moderator control

Enjoy the 17th of August
PoweredBy

The Forums are managed by develissimo stuff members, if you find any issues or misplaced content please help us to fix it. Thank you! Tell us via Contact Options
Leave a Message
Welcome to Develissimo Live Support