Pls keep your posts on the list...

----- Original Message ----- From: "vl" <[EMAIL PROTECTED]>
To: "Jonathan" <[EMAIL PROTECTED]>
Sent: Tuesday, July 11, 2006 4:01 PM
Subject: Re: [Zope] Viewing images from a form upload




Jonathan wrote:

----- Original Message ----- From: "vl" <[EMAIL PROTECTED]>
To: <zope@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
_______________________________________________
Zope maillist  -  Zope@zope.org
http://mail.zope.org/mailman/listinfo/zope
**   No cross posts or HTML encoding!  **
(Related lists - http://mail.zope.org/mailman/listinfo/zope-announce
http://mail.zope.org/mailman/listinfo/zope-dev )

Reply via email to