We had a similar requirement.  We solved it in the same way.  We
had the special image requests served by a servlet directly. 
The servlet read the information from the database (also Oracle)
and streamed out the bytes to the user.

The DBA did tweak the database to perform moderately well
(Oracle 9, 10G is supposed to be better with BLOBs).

Also, we were storing user sourced images that came in any size
(usually 80kb).  We used the JAI libraries to scale down the
images to a fixed size (about 7kb).

--- "Braun, James F" <[EMAIL PROTECTED]> wrote:

> I didn't mean for this to become debate. I was stuck with a
> legacy app
> that required storing images in the db.
> 
> With the help of this list and some digging I think I came up
> with a
> relatively elegant solution (subject to expert critique which
> is
> welcome). I don't know if attachments are allowed on this list
> so I've
> included the how-to I write up for myself after every quest of
> this
> sort. Any suggestions on how to improve this would be
> appreciated.
> 
> Although I'm new to struts I've collected several of these
> how-to
> articles which address problems I've seen on this list. Is
> there an
> archive I can post them where they can be critiqued and shared
> with
> others?
> 
> Thanks for all the help.
> 
> J.
> 
> J. Braun
> Polaroid Corp.
> Waltham MA USA
> +1 (781) 386 6871
> [EMAIL PROTECTED]
> 
> "Lemmings, as a group, have a very bad reputation. But no
> individual
> lemming has ever been singled out for blame."
> Anonymous
> 
> /// code /////////////////////////////////////////
> 
> How to read an image from a db and display in an html page
> 
> Goal: Display an image in a .jsp page that is stored in a
> database blob
> 
> Synopsis: The blob is read into a byte array that is stored in
> the
> ActionForm. The .jsp page uses a <img tag to call an action
> that writes
> the byte array to the response.
> 
> Reference:
> http://struts.apache.org/userGuide/struts-html.html#img
> 
> The code:
> 
> -- This reads the image in from the db
>         try
>         {
>           pictureStream = rs.getBinaryStream("picture");
>           byte[] bytes = new byte[1024*1024]; // some maximum
> size
> 
>           int byteSize = pictureStream.read(bytes); // read in
> the bytes
>           
>           byte[] bytesX = new byte[byteSize]; // create a new
> array of
> the proper size
>           
>           for(int i=0;i<byteSize;i++) // copy them into the
> new array
>           {
>             bytesX[i] = bytes[i];
>           }
>           
>           pictureBytes = bytesX; // assign it to the form
> variable
>         }
>         catch(FileNotFoundException ex)
>         {
>          
> System.err.println("selectionForm.populate.picturefile: " +
> ex.getMessage());
>           logger.error("selectionForm.populate.picturefile: "
> +
> ex.getMessage());
>         }
>         catch(IOException ex)
>         {
>          
> System.err.println("selectionForm.populate.picturefile: " +
> ex.getMessage());
>           logger.error("selectionForm.populate.picturefile: "
> +
> ex.getMessage());
>         }
> 
> -- This is the .jsp code
>                         <tr>
>                           <td height="210" colspan="2"
> valign="top"
> align="center">
>                             <!-- this is the photo section -->
>                             <div align="center">
>                               <html:img
> action="/jpegServerAction.do"
> width="105" height="142"
> alt="Client photo" />
>                             </div>
>                           </td>
>                         </tr>
> 
> -- This is the action code that writes the array to the
> response
> 
> public class JpegServerAction
>   extends Action
> {
>   public ActionForward execute(ActionMapping actionMapping, 
>                                        ActionForm actionForm,
>                                HttpServletRequest request,
>                                HttpServletResponse response)
>   {
>     WL_Logger logger = new WL_Logger();
> 
>     SelectionForm selectionForm = (SelectionForm)actionForm;
> 
>     try
>     {
>       response.setContentType("image/jpeg");
>       ServletOutputStream out = response.getOutputStream();
>       if(selectionForm.getPictureBytes() != null)
>       {
>         out.write(selectionForm.getPictureBytes());
>       }
>     }
>     catch(IOException ex)
>     {
>       System.err.println("JpegServerAction.execute: " +
> ex.getMessage());
>       logger.error("JpegServerAction.execute: " +
> ex.getMessage());
>     }
> 
>     return null; // tells the Action servlet to not do
> anything more
>   }
> }
> 
> -- This is the struts-config.xml entry - scope must be
> session!
> 
>     <action name="selectionForm" 
>             path="/jpegServerAction" 
>             scope="session" 
>             type="transcard15.JpegServerAction" 
>             validate="false" />
> 
> -- 
> This transmission is intended only for use by the addressee(s)
> named herein and may contain information that is proprietary,
> confidential and/or legally privileged. If you are not the
> intended recipient, you are hereby notified that any
> disclosure, copying, distribution, or use of the information
> contained herein (including any reliance thereon) is STRICTLY
> PROHIBITED. If you received this transmission in error, please
> immediately contact the sender and destroy the material in its
> entirety, whether in electronic or hard copy format. Thank
> you.
> 
> 
> 
>
---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 



Norris Shelton
Software Engineer
Sun Certified Java 1.1 Programmer
Appriss, Inc.
ICQ# 26487421
AIM NorrisEShelton
YIM norrisshelton



                
__________________________________ 
Yahoo! Mail - PC Magazine Editors' Choice 2005 
http://mail.yahoo.com

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

Reply via email to