aspose file tools*
The moose likes JSP and the fly likes File Download Problem Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of EJB 3 in Action this week in the EJB and other Java EE Technologies forum!
JavaRanch » Java Forums » Java » JSP
Bookmark "File Download Problem" Watch "File Download Problem" New topic
Author

File Download Problem

Lalit mishra
Ranch Hand

Joined: Sep 01, 2005
Posts: 99
I am writing code to download file from the server
the file can be word,excel,txt or pdf....

The code is working fine . I am able to download file ..
Following is my code ...


<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>

<%
String fileName = (String)request.getParameter("filename");
File f = new File (fileName);
String name = f.getName();
if (fileName.endsWith("doc"))
response.setContentType("application/msword");
else
if (fileName.endsWith("pdf"))
response.setContentType("application/pdf");
else
if (fileName.endsWith("xls"))
response.setContentType("application/vnd.ms-excel");
else
response.setContentType("application/octet-stream");

response.setContentType ("application/octet-stream");
response.setHeader("Content-disposition","attachment;filename="+name);
response.setContentLength((int)f.length());
InputStream in = new FileInputStream(f);
ServletOutputStream outs = response.getOutputStream();

int bit = 256;
int i = 0;
try {
while ((bit) >= 0) {
bit = in.read();
outs.write(bit);
}
}
catch (IOException ioe) {
ioe.printStackTrace(System.out);
}
outs.flush();
outs.close();
in.close();
%>




But I am geting following exception

- Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for t
his response
at org.apache.catalina.connector.Response.getWriter(Response.java:599)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade
.java:195)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:12
4)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.jav
a:117)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.jav
a:191)
at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(J
spFactoryImpl.java:115)
at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactor
yImpl.java:75)
at org.apache.jsp.download_jsp._jspService(download_jsp.java:94)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper
.java:332)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3
14)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.p
rocessConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpo
int.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFol
lowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP
ool.java:684)
at java.lang.Thread.run(Unknown Source)


What is wrong with the code

If possible give me some alternate solution for file download

Bye
Christophe Verré
Sheriff

Joined: Nov 24, 2005
Posts: 14687
    
  16

This is not related to your exception, but maybe you should correct this first: you're calling response.setContentType twice, always setting it to application/octet-stream


[My Blog]
All roads lead to JavaRanch
Christophe Verré
Sheriff

Joined: Nov 24, 2005
Posts: 14687
    
  16

If you look at the generated java class of your JSP, you'll notice that some data has already been written to the response (carriage returns). Maybe you should try to download from a servlet, instead of a jsp.
Ben Souther
Sheriff

Joined: Dec 11, 2004
Posts: 13410

This is a common issue when trying to stream binary data from a JSP.
JSP is a templating language for producing web pages (HTML/Javascript).

The JSP compilers typically add their own whitespace to the beginning and end of the output stream. This is not an issue in HTML because whitespace is ignored in that arena.

My best advice is to do this from a servlet and not from a JSP page.
If you can't or won't follow this advice, make sure there is no unintended whitespace output in your JSP. Put a return statement at the end of your streaming code and get rid of any line breaks or space characters at the top of the page.



Also, if you like, you can read this same advice in our JSP FAQ:
http://faq.javaranch.com/view?IllegalStateException
[ July 05, 2006: Message edited by: Ben Souther ]

Java API J2EE API Servlet Spec JSP Spec How to ask a question... Simple Servlet Examples jsonf
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: File Download Problem
 
Similar Threads
Java Serializable on Servlets
Download file HELP?
How do I execute a file download from JSP
Applet to Servlet Communication
file download method