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.