[Zope] How a method only returns the data of an image
Dean Stautberg
dstautberg@yahoo.com
Mon, 11 Mar 2002 10:27:12 -0800 (PST)
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/