Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/09/2010, 09:40
Willy_Vlautin
 
Fecha de Ingreso: septiembre-2010
Mensajes: 2
Antigüedad: 13 años, 7 meses
Puntos: 0
Generar un fichero desde un Blob

Hola chic@s,

tengo un pequeño problemilla.

Necesito descargar en un fichero lo almacenado en un campo Blob. A la hora de subirlo a la BBDD no tengo problema (se almacena de manera correcta). La dificultad viene a la hora de recuperarlo y que aparezca/salte la opción de "abrir", "guardar" o "cancelar" (el fichero)

el código que tengo es el siguiente:

Código:
public ActionForward descargaFichero(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		
		Long id=Long.parseLong(request.getParameter("id"));
		
		try{
			TTOL_Fichero_Solicitudes_Adsl adsl=adslDAO.findById(id);
			Blob blob=adsl.getFichero();
			InputStream stream=blob.getBinaryStream();
			ServletOutputStream fileOutputStream = response.getOutputStream();
			
			int length=-1;
			byte[] buffer= new byte[4096];
			
			while((length=stream.read(buffer))!=-1){
				fileOutputStream.write(buffer,0,length);
				fileOutputStream.flush();
			}
			response.setContentType("application/text");
			response.setHeader("Content-Disposition", "attachment;filename="+adsl.getNombreFichero());
		    response.setHeader("Pragma", "cache");
		    response.setHeader("Cache-control", "private, max-age=0");
		    stream.close();
		    fileOutputStream.close();
			
			return mapping.findForward(FWD_SUCCESS);
	        
		}
		catch(Exception e){
			logger.error("Error a la hora de generar el fichero de salida con id:"+id);
			logger.error(e.toString());
			return mapping.findForward(FWD_ERROR);
		}
	}

Resulta que no pregunta si quiero hacer una de las tres opciones anteriormente mencionadas, sino que lo abre directamente bloqueando el navegador. Y todo esto lo hace la primera vez, porque la siguiente directamente bloquea el navegador y el acrobat (dice que no encuentra el fichero).

En la BBDD guardo el nombre y la extensión del fichero que he subido, por lo que a la hora de bajarlo recupero el Blob como bytes, lo meto en un fichero y lo nombro con el nombre y extensión que ya tenía cuando lo subí. De esta manera si subí un .cvs debería de pedir abrir el excel y si subo un .pdf pediría abrir el abrobat (por ejemplo).

sabéis que puede estar fallando de mi código?

Muchísimas gracias de ante mano.