Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/01/2007, 06:28
david.rguez
 
Fecha de Ingreso: julio-2006
Mensajes: 60
Antigüedad: 17 años, 10 meses
Puntos: 0
Excepción con getOutputStream

Estoy desarrollando una aplicación web en Java / Struts. En una página JSP tengo que poner un listado de enlaces, los cuáles, al pulsarlos, invoca una descarga del archivo elegido al ordenador cliente.

Pero me lanza el error "getOutputStream() ya ha sido llamado para esta respuesta". He revisado el código y no tengo más que una sola llamada a ese método, y no entiendo por qué me salta. ¿Alguien podría ayudarme?

Este es el código que lanza la excepción:

Código PHP:
package biblioteca.registrados.archivos;
import biblioteca.factory.ArchivosDAO;
import biblioteca.factory.MysqlDAOFactory;
import biblioteca.sesion.ArchivoVO;
import biblioteca.sesion.ProyectoVO;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.Collection;
import java.util.Iterator;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

/**
 * Maneja la lógica de negocio para descargar el archivo asociado a un Proyecto de Fin de Carrera.
 *
 * @poseidon-object-id [Im20e52fem10f92dd2f0amm7df1]
 * @author David Rguez.
 */
public class DescargaFicheroBean {

/**
 *
 *
 * @poseidon-object-id [Im20e52fem10f92dd2f0amm65fb]
 * @return
 * @param req
 * @param res
 */
    
public synchronized ActionMessages descargar(HttpServletRequest reqHttpServletResponse res) {
        
// Variables
        
HttpSession sesion req.getSession();
        
ActionMessages errores null;
        
Collection archivos = (Collection)sesion.getAttribute("losFicheros");
        
ArchivoVO archivo null;
        
int id Integer.parseInt(req.getParameter("id"));
        
int contador 0;
        
int bytesLeidos 0;
        
byte[] buffer = new byte[8192];
        try {
            
// Recuperamos la ruta
            
Iterator arch archivos.iterator();
            while (
contador id){
                
contador++;
                
archivo = (ArchivoVOarch.next();
            }
            
String ruta archivo.getRuta();
            
int tamaño archivo.getTamaño();
            
String nombre archivo.getNombreArchivo();
            
// Completamos la ruta
            
String rutaCompleta sesion.getServletContext().getRealPath(ruta);
            
// Recuperamos el contenido del archivo al que apunta la ruta y lo colocamos en la respuesta
            // También rellenamos el resto de información
            
res.setContentLength(tamaño);
            
res.setContentType("APPLICATION/OCTET-STREAM");
            
//res.setContentType("application/x-file-download");
            
res.setHeader("Content-disposition""attachment; filename=\"" nombre+"\"");
            
ServletOutputStream salida res.getOutputStream();
            
FileInputStream descarga = new FileInputStream(rutaCompleta);
            while ((
bytesLeidos descarga.read(buffer08192)) != -1) {
                
salida.write(buffer0bytesLeidos);
            }
            
salida.flush();
            
salida.close();
            
descarga.close();
            return 
null;
        }catch (
Exception e) {
            if (
errores == null)
                
errores = new ActionMessages();
            
errores.add("errorGeneral",new ActionMessage("error.general"));
            return 
errores;
        }
    }
 } 
Gracias.