RE: [Zope] How a method only returns the data of an image
I am doing something on my site which is similar to the original request in this thread (get a method to return the exact data of an Image object), except that I use it to get a random image from a folder. I used the index_html() method of Image, and I put it in a Python Script as follows: request = container.REQUEST response = request.RESPONSE images = context['images'].objectValues ('Image') image = random.choice (images) response.write (image.index_html(request,response)) I don't know if this is better or worse than the suggestions mentioned already, but since it's different, I thought I would share it. I don't seem to need to set the Content-Type or Content-Length headers with this strategy, though. -Dean
Message: 40 From: "Trevor Toenjes" <zope@toenjes.com> To: "Joel Burton" <joel@joelburton.com>, "Trevor Toenjes" <zope@toenjes.com> Cc: <zope@zope.org> Subject: RE: [Zope] How a method only returns the data of an image Date: Mon, 11 Mar 2002 10:34:18 -0500
Clever. :) I think this approach will work for now. It seems the easiest solution. Sometimes easier is better.
The redirect does seem to slow down the response a little. I will revisit the whole setHeader manipulation at a later date.
Thanks. -Trevor
-----Original Message----- From: zope-admin@zope.org [mailto:zope-admin@zope.org]On Behalf Of Joel Burton Sent: Monday, March 11, 2002 10:02 AM To: Trevor Toenjes Cc: zope@zope.org Subject: Re: [Zope] How a method only returns the data of an image
On Mon, 11 Mar 2002, Trevor Toenjes wrote:
I need to make a method act like the clone of an image. Without extending the Image class...(I would like to do this in DTML or python-script) I am simply trying to get a method to return the exact data of an Image object, so it can be used in normal HTML <IMG src="myimage.jpg?somevariable">. If the Image is a method, it can execute some logic based on the QUERY_STRING.
example: DTML_Method "myimage.jpg" # should look and smell like a JPG to the browser (but also execute some logic without # effecting the image header data) ---- | <dtml-call "RESPONSE.setHeader('Content-type', 'image/jpeg')"> | <dtml-var expr="therealimage.data"> | <dtml-var somelogic> ---- But this doesn't return the proper data or Content-Length: "therealimage" is a standard Zope Image object.
One very easy solution is to have your script just redirect to the object. <dtml-call "RESPONSE.redirect(...)">
Advantages:
* The user's browser can take advantage of their local cached copy, if they have one, and any proxy servers can take advantage of their local cached copy, if they have one, of the image. If there's a query as part of the URL, many caching mechanisms won't show a cached version.
Disadavantages:
* User can see the real image URL (which might be a problem is your script is meant to check credetials before presenting it)
* Two HTTP requests rather than one (but would still be faster in most cases because of the caching)
Otherwise, you could get the image size with therealimage.get_size() and put this in the header.
Anyone: is the a call to create the header for an image correctly by itself? Looking briefly through Image.py, I didn't see it.
--
Joel BURTON | joel@joelburton.com | joelburton.com | aim: wjoelburton Independent Knowledge Management Consultant
__________________________________________________ Do You Yahoo!? Try FREE Yahoo! Mail - the world's greatest free email! http://mail.yahoo.com/
participants (1)
-
Dean Stautberg