[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/