May not be critical but try using the ServletOutputStream instead of OutputStream. DOC URL: http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletResponse.html
//Clear content of the underlying buffer in the response //without clearing headers or status code. response.resetBuffer(); response.setContentLength(output.length); //Returns a ServletOutputStream suitable for writing binary data in the response. //The servlet container does not encode the binary data. ServletOutputStream os = response.getOutputStream(); os.write(output); os.close(); Additionally, append &pdf=.pdf\ to the URL. -----Original Message----- From: Anhony [mailto:[EMAIL PROTECTED] Sent: Wednesday, May 04, 2005 9:20 AM To: Tomcat Users List Subject: Re: Serving files using tomcat I use this code and it works in my app. Their are small differences between how we copy the data to the response output. I don't know for sure, but this may account for why the fragment I posted works. The difference is small, I think it would be worth giving it a try. AS- ----- Original Message ----- From: "Steve Vanspall" <[EMAIL PROTECTED]> To: "Tomcat Users List" <[email protected]> Sent: Wednesday, May 04, 2005 11:47 AM Subject: Re: Serving files using tomcat > 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" <[email protected]> > 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" <[email protected]> >> 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] > > --------------------------------------------------------------------- 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]
