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
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
FileUtils.copyInputStreamToFile(fichero.getInputstream(), destFile); articulo a = new articulo(); a.setArchivo(destFile); a.setTitulo(titulo); a.setDescripcion(descripcion); this.controlador.registrarArticulo(a); }
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
<p:dataTable var="articulos" value="#{listadoArticulos.listado}" rows="10" paginator="true" > <p:column headerText="Titulo" sortBy="#{articulos.titulo}" > <h:outputText value="#{articulos.titulo}" /> </p:column> <p:column headerText="Descripcion" > <h:outputText value="#{articulos.descripcion}" /> </p:column> [B]<p:column headerText="Fichero" > <h:outputText value="#{articulos.archivo.name} y pesa #{articulos.archivo.length()}" /> </p:column>[/B] <p:column headerText="Descarga"> <p:commandLink action="#{articuloBean.getFichero(articulos.archivo)}" value="Descargar"/> </p:column> </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
int c; while ((c = in.read()) != -1) { out.write(c); } return out; }
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?