Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/10/2008, 12:04
SoftEdward
 
Fecha de Ingreso: febrero-2005
Ubicación: 101% Paraguayo
Mensajes: 57
Antigüedad: 19 años, 2 meses
Puntos: 0
Forzar descarga de archivo en JAVA (JSP)

Hola,
Tengo una funcion que encontre aqui en el cual la paso el nombe del archivo y lo descarga ya sea imagen texto . esta es la funcion me descarga pero me da un error:

Funcion
Código PHP:
<!--contents of download.jsp-->
<&
#37;@ page import="java.util.*,java.io.*"%>

//lees el archivo claro que por aqui aplicas algunos filtros de seguridad y esas cosas 
//Le paso asi: ?file=texto.txt
File f = new File ("carpeta/"request.getParameter("file") );
//aqui seleccionas el content type (puede ser excel/word/powerpoint etc..)
response.setContentType ("text/plain");
//aqui seleccionas el nombre con el cual el usuario lo recibira
response.setHeader ("Content-Disposition""attachment; filename=\""+request.getParameter("file")+"\"");
//optenemos el nombre del archivo
String name f.getName().substring(f.getName().lastIndexOf("/") + 1,f.getName().length());
//leemos el archivo para mandarselo al cliente

InputStream in = new FileInputStream(name);
ServletOutputStream outs response.getOutputStream();

int bit 256;
int i 0;
try {
       while ((
bit) >= 0) {
        
bit in.read();
        
outs.write(bit);
    }
    
//System.out.println("" +bit);
}catch (IOException ioe) {
    
ioe.printStackTrace(System.out);
}
outs.flush();
outs.close();
in.close(); 
El archivo me descarga pero me da el siguiete error:

Código:
13:20:33 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() para servlet jsp lanzó excepción
java.lang.IllegalStateException: getOutputStream() ya ha sido llamado para esta respuesta
	at org.apache.catalina.connector.Response.getWriter(Response.java:607)
	at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:196)
	at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
	at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
	at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:179)
	at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:116)
	at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:76)
	at org.apache.jsp.jsp.Download_jsp._jspService(Download_jsp.java:106)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	at java.lang.Thread.run(Unknown Source)
Por lo que veo el error esta aqui,
ServletOutputStream outs = response.getOutputStream();
pero no entiendo que es, o como solucionar.

Alguna solucion?
Existe alguna otra forma de solucionar esto?

Última edición por SoftEdward; 24/10/2008 a las 12:05 Razón: Actualizacion