Foros del Web » Programación para mayores de 30 ;) » Java »

Manejo de archivos en java

Estas en el tema de Manejo de archivos en java en el foro de Java en Foros del Web. Buenas a todos/as, os comento mi problema a ver si alguien puede echarme una mano. Tengo que programar una funcionalidad que saque varios archivos blob ...
  #1 (permalink)  
Antiguo 07/09/2009, 04:58
 
Fecha de Ingreso: julio-2009
Mensajes: 7
Antigüedad: 14 años, 9 meses
Puntos: 0
Manejo de archivos en java

Buenas a todos/as, os comento mi problema a ver si alguien puede echarme una mano.
Tengo que programar una funcionalidad que saque varios archivos blob de una BD, los comprima en un zip y los descargue, todo en un solo click. Llevo varios días dándole vueltas y lo mas complicado me parece juntar todos los archivos para poder comprimirlos (la compresión si la he realizado otra veces). ¿Habría que crear una especie de carpeta temporal y luego borrarla?

Agradecería mucho cualquier ayuda, por pequeña que sea.

Saludos!
  #2 (permalink)  
Antiguo 08/09/2009, 01:08
 
Fecha de Ingreso: julio-2009
Mensajes: 7
Antigüedad: 14 años, 9 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!
  #3 (permalink)  
Antiguo 08/09/2009, 04:46
 
Fecha de Ingreso: julio-2009
Mensajes: 7
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Manejo de archivos en java

Es decir, necesito descargar varios archivos blob en una carpeta, la compresión de la carpeta si es algo sencillo para mi.

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:55.