Uploading image files via forms ...
Imagine a ZClass that can optionally contain an image. You'll probably have something like the following in your addForm method: <INPUT TYPE="file" NAME="newimage" VALUE=""> In your ZClass add constructor, after the new instance is created, we want to (conditionally) create the image only if a file was chosen. How? A piece of code like the following doesn't work: <dtml-if newimage> <dtml-call "manage_addImage('id', newimage.read(), '')"> </dtml-if> When no file is chosen, Zope still creates an image (size 0) because REQUEST.newimage is defined (albeit empty). I immediately tried <dtml-if "_.len(_.str(newimage)) !=0"> <dtml-call "manage_addImage('id', newimage.read(), '')"> </dtml-if> but this still creates a size 0 image. Why? Well, there's yet another possible way out of this mess as documented in the How-to "http://www.zope.org/Members/Zen/howto/FormVariableTypes" <INPUT TYPE="file" NAME="newimage:string:ignore_empty" VALUE=""> with <dtml-if "newimage !=''"> <dtml-call "manage_addImage('id', newimage, '')"> </dtml-if> (Note, the string typecast is necessary or else ignore_empty seems to have no effect.) This works in that not choosing a file stops the image from getting created and an image does get created if one was chosen. The problem now is that the string typecast has lost the content_type of the uploaded image. If it was "image/gif", it now shows up as a raw octet_stream. If anyone can provide a way out of this morass, I'd greatly appreciate it. Cheers, Darran "veteran newbie" Edmundson
participants (1)
-
Darran Edmundson