[Zope] Viewing images from a form upload
Jonathan
dev101 at magma.ca
Tue Jul 11 16:18:25 EDT 2006
Pls keep your posts on the list...
----- Original Message -----
From: "vl" <admin at vltool.com>
To: "Jonathan" <dev101 at magma.ca>
Sent: Tuesday, July 11, 2006 4:01 PM
Subject: Re: [Zope] Viewing images from a form upload
>
>
> Jonathan wrote:
>>
>> ----- Original Message ----- From: "vl" <admin at vltool.com>
>> To: <zope at zope.org>
>> Sent: Tuesday, July 11, 2006 3:07 PM
>> Subject: [Zope] Viewing images from a form upload
>>
>>
>>> I am stuck on trying to preview images that are uploaded from a html
>>> form.
>>>
>>> <form method="POST" action="py_save_new_image"
>>> enctype="multipart/form-data">
>>> <input type="file" name="file">
>>> <input type="submit" name="save" value="Upload">
>>>
>>> When the form is submited it sends it to a python script that gets the
>>> image and sends it to another page to be previewed. Problem is, I
>>> receive and error that the image cannot be displayed.
>>>
>>> My python script is below.
>>>
>>> REQUEST=context.REQUEST
>>> content_type=file.headers['Content-Type']
>>> if content_type.find('image')!=-1:
>>> context.REQUEST.RESPONSE.setHeader('Content-Type', 'image/jpg')
>>> img = file.read()
>>> print context.dtml_select_new_image(context, context.REQUEST,
>>> image=img)
>>> return printed
>>> else:
>>> return "error"
>>>
>>> I load the image in a dtml method with:
>>> <dtml-var image>
>>
>> The dtml-var tag creates an html img tag which your browser then uses to
>> make another HTTP call to the server to acquire the image file. This
>> means that the image data must be saved on the server (ie. you cannot
>> return the image data in the initial response).
>>
>> So, your process should be:
>>
>> 1) get the image data from the form
>> 2) save an image object somewhere
>> 3) pass back an html img tag with the path/id of the saved image object
> Is saving the image the only way of viewing it? I can view the image if I
> return it in the python script like:
>
> context.REQUEST.RESPONSE.setHeader('Content-Type', 'image/jpg')
> img = file.read()
> return img
>
> The image will display. But I need to view it in a dtml-method.
If you want to use plain vanilla html then you need to use the img tag to
display the image. The img tag causes the browser to initiate a new http
request to the server, therefore the server needs a way to return the image
(ie. a path/id).
There are two ways (that I know of, but there are probably other ways)
around this situation:
1) store the image in a temporary folder (a folder that uses RAM not written
to disk via the zodb); you need to be careful with memory utilization with
this approach.
2) you may be able to send the data back in a javascript variable and then
execute javascript on the browser in order to display the image
(mulit-browser support will be an issue with this option)
Jonathan
More information about the Zope
mailing list