Thanks for the help. That code would be much appreciated. Could you also
tell me to which directory I should compile my .class to?

Ilan

> -----Original Message-----
> From: Christoph Reck [mailto:[EMAIL PROTECTED]
> Sent: 25 November 2004 04:17
> To: Velocity Users List
> Subject: Re: vm to return a binary file
>
>
> Ilan Azbel wrote:
> > Hello,
> >
> > I would like a vm to return a binary file and thereby instruct
> the browser
> > not to display it, but rather to download it. That is, ask the
> user if they
> > would like to "Open" or "Save" the file.
> >
> > I would like to do this without any redirecting statements - so
> as soon as a
> > user requests a certain .vm file, the corresponding java
> creates some type
> > of binary data, and the browser immediately asks whether to open or save
> > this data.
> >
> > Thanks
> > Ilan
>
> Hi,
>
> first, be advised to configure your servlet container to serve binary
> data itself or to use your own servlet to create the binary content.
>
> Solutions using Velocity tend to be a bit fragile (character encoding,
> whitespace handling, first and only to write to the output stream,
> changing response headers, etc.).
>
>
> I once tried the following, but at some point in velocity history the
> response stream was changed - to my memory it was from Writer to
> OutputStream.
> (please notice the several context tools used to do the task).
>
> #set( $l_file = $ServletContext.getRealPath("/images/$l_fileName") )
> #if( $File.fileExists($l_file) )
>    #set( $l_fileData = $File.fileRead($l_file) )
>    ### check for other image types
>    $res.setHeader("Content-type", "image/jpeg")
>    $data.Out.write($l_fileData)
> #else
>    #error( "File $l_file does not exist and cannot be displayed" )
> #end
>
>
> the I rewrote it to:
> <br>
> <img src="#image($l_fileName)" border="0" />
>
>
> using a globalMacros.vm:
> #macro( image $fileName )/$WEBAPP/images/$fileName#end
>
> This lets the HTTP server do its job.
>
>
> You could use the first approach in velocity, by placing the outputStream
> object into the context and letting the template add the (binary) data.
> But be aware! this construct is really fragile - mainly due to the
> inconsitent whitespace handling of velocity. Also problesm arise when
> using the VelocitylayoutServlet, wher you have to instruct to skip the
> layout in such a case...
>
> If you wish an example of creating binary content with a servlet
> check the literature, servlets.com, or I can send you a servlet code
> that creates button+text images on the fly.
>
> --
> :) Christoph Reck
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
> ---
> Incoming mail is certified Virus Free.
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.801 / Virus Database: 544 - Release Date: 2004/11/24
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to