Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/09/2009, 01:08
BigBrothaJ
 
Fecha de Ingreso: julio-2009
Mensajes: 7
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Manejo de archivos en java

Hola de nuevo, estoy programando un action que haga todo lo necesario, copio el código.

Código:
public class DescargarDocumentosErroneosAction extends RestrictionEdicionAction{

	public ActionForward _execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		Criteria c = new Criteria();
		
		List documentosErroneosL = DocumentosErroneosPeer.doSelect(c);

	for(int i=0;i<=documentosErroneosL.size()-1;i++){
			DocumentosErroneos doc = (DocumentosErroneos)documentosErroneosL.get(0);
			
			String dominio = doc.getCNIG() + "_" + doc.getXDocumento_e();
			
			//Tipo Mime del escrito, por defecto application/octet-stream
			String sTipoMime = "application/octet-stream";
			// Extensión del escrito
			String sExtension = "";
			
			sTipoMime = doc.getAdjuntoExtension_e();
			
			//Establecemos el tipo mime de entre los posibles
			if (sTipoMime.equalsIgnoreCase("doc"))
			{
				sTipoMime = "application/msword";
				sExtension = ".doc";
			}
			else if (sTipoMime.equalsIgnoreCase("rtf"))
			{
				sTipoMime = "application/rtf";
				sExtension = ".rtf";
			}
			else if (sTipoMime.equalsIgnoreCase("gif"))
			{
				sTipoMime = "image/gif";
				sExtension = ".gif";
			}
			else if (sTipoMime.equalsIgnoreCase("pdf"))
			{
				sTipoMime = "application/pdf";
				sExtension = ".pdf";
			}
			else if ( sTipoMime.equalsIgnoreCase("tif") || sTipoMime.equalsIgnoreCase("tiff"))
			{
				sTipoMime = "image/tiff";
				sExtension = ".tif";
			} 
			else if ( sTipoMime.equalsIgnoreCase("jpg") || sTipoMime.equalsIgnoreCase("jpeg"))
			{
				sTipoMime = "image/jpg";
				sExtension = ".jpg";
			}
			else
			{
				sTipoMime = "application/octet-stream";
				sExtension = "."+ sTipoMime;
			}
			
			response.setHeader("Content-Disposition","inline;filename=Documentación "+ dominio+ sExtension);
			response.setContentType(sTipoMime);
			
			ServletOutputStream sos = response.getOutputStream();
			
			java.io.BufferedOutputStream bos = new java.io.BufferedOutputStream(sos);
			
			bos.write(doc.getTAdjunto_e());		
			bos.flush();
			bos.close();
		}
		
		return mapping.findForward("ok");	
		
	}
}
Hasta ahora la clase saca los blob de la BD y los descarga, el problema es que solo me descarga el primer archivo y al final me lanza este error:

java.lang.IllegalStateException: No puedo reenviar después de que la respuesta se haya llevado a cabo.

Creo que puede ser no se puede hacer mas de un response.getOutputStream() por petición.

Necesito sacarlos todos porque tengo que comprimirlos para su descarga.

Alguna ayudita??

Gracias!