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

[SOLUCIONADO] Metodo para descargar un BLOB en JavaEE

Estas en el tema de Metodo para descargar un BLOB en JavaEE en el foro de Java en Foros del Web. Estoy trabajando en una aplicación de pruebas para aprender acerca del manejo de ficheros con JavaEE. Estoy usando Netbeans 8.0.1, Wildfly 8, JPA y Primefaces. ...
  #1 (permalink)  
Antiguo 28/09/2015, 18:50
Avatar de Hyemin  
Fecha de Ingreso: agosto-2014
Mensajes: 147
Antigüedad: 10 años, 3 meses
Puntos: 0
Metodo para descargar un BLOB en JavaEE

Estoy trabajando en una aplicación de pruebas para aprender acerca del manejo de ficheros con JavaEE.

Estoy usando Netbeans 8.0.1, Wildfly 8, JPA y Primefaces.

Tengo un solo objeto, una entidad con 4 propiedades

Código Java:
Ver original
  1. @Id @GeneratedValue (strategy = GenerationType.IDENTITY)
  2.     private int id_articulo;
  3.    
  4.     private String titulo;
  5.    
  6.     private String descripcion;
  7.    
  8.     //En la primera prueba tenemos un BLOB directo en la tabla de fichero
  9.     @Lob
  10.     private File archivo;

Hice un formulario para cargar datos y el respectivo BLOB, el formulario cuando va a cargar los datos llama a un metodo en un backing bean

Código Java:
Ver original
  1. public void generarArticulo() throws IOException{
  2.      
  3.  
  4.         File destFile= new File(fichero.getFileName());
  5.     FileUtils.copyInputStreamToFile(fichero.getInputstream(), destFile);
  6.        
  7.         articulo a = new articulo();
  8.         a.setArchivo(destFile);
  9.         a.setTitulo(titulo);
  10.         a.setDescripcion(descripcion);
  11.        
  12.        
  13.         this.controlador.registrarArticulo(a);
  14.        
  15.     }

Este metodo para registrar los datos funciona bien, el registro se añade a la base de datos correctamente.

Luego hice un datatable, funciona bien y me muestra todos los registros, para probar que los ficheros esten siendo traidos correctamente puse un outputext como esta en negritas que me da el peso en bytes de los ficheros y todos coinciden bien.

Código Java:
Ver original
  1. <p:dataTable var="articulos" value="#{listadoArticulos.listado}"
  2.                          rows="10"
  3.                          paginator="true"
  4.                          >
  5.                     <p:column headerText="Titulo" sortBy="#{articulos.titulo}" >
  6.         <h:outputText value="#{articulos.titulo}"  />
  7.     </p:column>
  8.     <p:column headerText="Descripcion" >
  9.         <h:outputText value="#{articulos.descripcion}" />
  10.     </p:column>
  11.   [B]<p:column headerText="Fichero" >
  12.       <h:outputText value="#{articulos.archivo.name} y pesa #{articulos.archivo.length()}"  />
  13.     </p:column>[/B]
  14.      
  15.           <p:column headerText="Descarga">
  16.               <p:commandLink action="#{articuloBean.getFichero(articulos.archivo)}" value="Descargar"/>
  17.                      
  18.     </p:column>          
  19.                            
  20. </p:dataTable>

Ahora el desafio que se me plantea es hacer que el usuario descargue directamente de ese objeto en memoria el fichero, probe muchas formas y no consigo hacerlo funcionar.

Lo ultimo que hice fue el metodo getFichero(File file) que pueden ver en el commandLink del codigo anterio el cual llama a este metodo

Código Java:
Ver original
  1. public FileOutputStream getFichero (File file) throws FileNotFoundException, IOException {
  2.  
  3.        FileInputStream in = new FileInputStream (file);
  4.        FileOutputStream out = new FileOutputStream("/home/alex/ficheros/"+file.getName());
  5.        int c;
  6.        
  7.        while ((c = in.read()) != -1) {
  8.                 out.write(c);
  9.             }
  10.        
  11.        return out;
  12.        
  13.         }

El metodo que consegui hacer me trae de la base el fichero y me lo copia en la carpeta destino, el problema es que aun no me di cuenta como hacer para que en lugar de copiar a una carpeta se le presente al usuario un dialogo de descarga normal en el browser.

Alguna idea?
  #2 (permalink)  
Antiguo 05/10/2015, 07:12
Avatar de Hyemin  
Fecha de Ingreso: agosto-2014
Mensajes: 147
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Metodo para descargar un BLOB en JavaEE

Al final lo que hice fue hacer un Servlet que toma como parametro el ID del objeto y devuelve la imagen.

Es una solucion medio chancha pero funciona

Etiquetas: blob, metodo, netbeans, string
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 18:19.