Unfortunately that is what I do OutputStream dos = null; FileInputStream fis = null; try { fis = new FileInputStream(rf.getPdf()); response.setContentType("application/pdf"); response.setContentLength((int) rf.getPdf().length()); //response.setHeader(response.) dos = response.getOutputStream();
int read = -1; byte[] bytes = new byte[100000]; while((read = fis.read(bytes)) != -1) dos.write(bytes, 0, read); dos.flush(); return mapping.findForward("PDF"); } catch (Exception e) { // TODO Auto-generated catch block if(e instanceof SocketException) return mapping.findForward("reload"); throw new IOException(e.toString()); } finally { if(dos != null) dos.close(); if(fis != null) fis.close(); } Acrobat now loads but the PDF doesn't appear. Probably worth mentioning that I use struts, so I forward to a blank page with the content type set to application/pdf, maybe that is the problem, but not sure what else to do with the return. When I do the same thing with a dynamic image and forward to a page with a jpg content type, the image appears without a problem. Steve ----- Original Message ----- From: "Anhony" <[EMAIL PROTECTED]> To: "Tomcat Users List" <tomcat-user@jakarta.apache.org> Sent: Thursday, May 05, 2005 1:02 AM Subject: Re: Serving files using tomcat > Greetings, > > Take a look at the code fragment below. It should serve as a good starting > point. > I hope this helps. > > AS- > > private void processPDFRequest(HttpServletRequest request, > HttpServletResponse response) throws ServletException, IOException, > Exception > { > int bytesCopied = 0; > > FileInputStream fin = null; > OutputStream out = null; > > String fileAddress = "The fully qualified path to your PDF file"; > if( fileAddress == null ) > return; > > int ext = fileAddress.lastIndexOf( '.' ); > if( ext != -1 ) > { > ext = fileAddress.substring( ext+1, > fileAddress.length() ).toLowerCase(); > > if( ext == "pdf" ) > response.setContentType("application/pdf"); > else > "Do whatever you think best to do" > } > else > "Do whatever you think best to do" > > try > { > out = response.getOutputStream(); > fin = new FileInputStream( fileAddress ); > bytesCopied = StreamCopier.copy( fin, out ); > } > finally > { > if( fin != null ) > fin.close(); > if( out != null ) > { > out.flush(); > out.close(); > } > } > } > > > ----- Original Message ----- > From: "Steve Vanspall" <[EMAIL PROTECTED]> > To: "Tomcat User List" <tomcat-user@jakarta.apache.org> > Sent: Wednesday, May 04, 2005 9:29 AM > Subject: Serving files using tomcat > > > Hi, > > I have been looking around and haven't found a solution that works > > basically I have a PDF that gets created dynamically. Now to save memory I > have the PDF written to a file rather than a ByteArray. The only way I can > be sure that I wont encounter errors creating the file is to use > File.createTempFile. The creation goes of ok. And I have checked the file > itself and the PDF looks great. > > How do i now serve this to the user who has requested it. If I try to write > it to the response (using the same method I use to creare dynamic image, > this works), it just shows up a blank screen. > > The problem also is, even if it did show the PDF, acrobat, to my understand > will read only chunks of the stream and will go pack to get more. Thisis a > problem because there is nothing to go back for. > > So the point, > > If I can just redirect the browser to a file in the tomcat temp directory > (can I do that, will the use have access to that directory), then how do I > translate the location of the temp directory to a url that is accesible > outside. > > If not then what other suggestions can people give me. > > Thanks in advance > > Steve > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]