Como decía se almacenara la imagen en el servidor en la ruta especifica y en este caso los datos se almacenaran en la BD que seria la ruta, nivel educativo, año, y etiquetas para esto primefaces nos facilita de alguna manera esto ok el formulario que pida la información del archivo ojo son 2 proyectos diferentes
Creamos la configuración de Hibernate en MySQL:
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/ejem?zeroDateTimeBehavior=convertToNull</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">061090</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.show_sql">true</property>
//esto se genera automaticamente despues de crear los pojos
<mapping resource="com/davho/models/Recurso.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Creamos la configuración de Hibernate en PostgreSQL:
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/ejem</property>
<property name="hibernate.connection.username">postgres</property>
<property name="hibernate.connection.password">061090</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.show_sql">true</property>
//esto se genera automaticamente despues de crear los pojos
<mapping resource="com/davho/models/Video.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Despues de esto se hace la reingenieria inversa para filtrar las tablas de la BD que vamos a usar que se hace mediante el asistente ok ojo para el postgres el match-schema debe ser publico sino no filtrara las tablas de la BD debe quedar asi match-schema="public"
Despues creamos los pojos de ambos proyectos y se creara tambien los modelos una vez realizado esto en mi caso creo los interfaces para implementarlos en el DAO necesario y deben quedar asi, para ambos:
public interface FrondEndResource {
public boolean registerResource(Session session, Recurso resource) throws Exception;
}
el Dao para este caso en ambos proyectos seria:
public class RecursoDAO implements FrondEndResource{
@Override
public boolean registerUsers(Session session, Recurso resource) throws Exception {
session.save(resource);
return true;
}
}
y bueno finalmente el ManagedBean para el caso de MySQL seria asi:
ManagedBean
@RequestScoped
public class ManagedBeanResource{
private Session session;
private Transaction transaction;
private Recurso recurso;
private String destino = "C:\\INEE\\BankImage\\";
private UploadedFile file;
private Recurso resource;
public ManagedBeanResource() {
recurso = new Recurso();
recurso.setId(null);
}
/*metodo para registrar los datos del archivo en la base de datos de MySQL*/
public void registerUser(){
/*inicializamos para asegurarnos*/
this.session = null;
this.transaction = null;
try {
//abrimos sesion de conexcion
session = HibernateUtil.getSessionFactory().openSession();
//creamos la transaccion y la comenzamos
transaction = session.beginTransaction();
/*instanciamos los objetos*/
/*creamos el dao que utilizaremos*/
RecursoDAO rDAO = new RecursoDAO();
recurso.setRuta(destino+getFile().getFileName());
rDAO.registerUsers(session, recurso);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Exito", "Datos insertados Exitosamente"));
transaction.commit();//cerrar transaccion
//esta forma limpiamos el formulario sin usar el js
recurso = new Recurso();
recurso.setId(null);
} catch (Exception e) {
//verificamos sino hay ya una transaccion ya definida
if(transaction != null){
//si lo hay haremos que todo se revierta en la BD y que como estaba antes de utilizar este metodo
transaction.rollback();
}
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Error Fatal", "Contacte con su administrador "+e.getMessage()));
}finally{
//verificamos sino hay ya una session ya definida
if(session != null){
//si lo hay cerramos la session
session.close();
}
}
}
/*metodo que sirve para crear el archivo seleccionado mediante un flujo de bytes y almacenarlo en la ruta y con el nombre */
public void transferir(String fileName, InputStream in) {
try {
//creamos el arhivo que saldra de la aplicacion
OutputStream o = new FileOutputStream(new File(destino + fileName));
//iniciamos un valor
int reader = 0;
//recibimos el tamaño del archivo que se va a crear
byte[] bytes = new byte [(int) getFile().getSize()];
//generamos un ciclo while que cree el archivo mientras el tamaño no sea menor a -1 byte
while((reader = in.read(bytes)) != -1){
//guardamos o escribimos el archivo
o.write(bytes, 0, reader);
}
in.close();
o.flush();
o.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
/*metodo encargado de seleccionar el archivo y restringuiendo que solo sea jpg*/
public void upload() throws Exception {
//variable de validar extencion
String txtValidador;
//condicional si se obtuvo o no un archivo
if(getFile() != null){
//si hay archivo guardar el nombre del archivo en una variable
String ext = getFile().getFileName();
//si se obtuve o no el nombre del archivo seleccionado
if(ext != null){
//si se obtuvo la variable de extencion obtendra mediante un substring del nombre del archivo que despues del (".") seleccione los caracteres
txtValidador = ext.substring(ext.indexOf(".")+1);
}else{
//sino obtuvo el nombre del archivo se le asigna null
txtValidador = "null";
}
//validar si despues del (".") la extencion permitida sea jpg
if(txtValidador.equals("jpg")){
//si es asi genereamos un try catch porque accederemos a algo que esta afuera de la maquina virtual de java
try {
//mandamos a llamar el metodo con los parametros de entrada que pide
transferir(getFile().getFileName(), getFile().getInputstream());
//si falla
} catch (Exception e) {
//mandamos un mensaje de error
Logger.getLogger(ManagedBeanResource.class.getName()).log(Level.SEVERE, null, e);
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Error","No se subio el archivo"));
}
//despues de transferir el archivo mostramos los datos de dicho archivo en un FacesContext para visualizarlo
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Exito", "Archivo: " + getFile().getFileName() + " subido al servidor \n\n Tipo de Archivo: " +
getFile().getContentType() + "\n\n Tamaño del archivo: " + getFile().getSize() + " bytes , con destino a: " +destino+getFile().getFileName()));
}else{
//mandar mensaje de error si no se selecciono un jpg
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Error", "Solo archivos con extencion .jpg"));
}
}else{
//mandar mensaje de que no se selecciono ningun archivo
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Error", "No hay archivo seleccionado"));
}
}
public UploadedFile getFile() {
return file;
}
public void setFile(UploadedFile file) {
this.file = file;
}
public String getDestino() {
return destino;
}
public void setDestino(String destino) {
this.destino = destino;
}
public Recurso getResource() {
return resource;
}
public void setResource(Recurso resource) {
this.resource = resource;
}
public Recurso getRecurso() {
return recurso;
}
public void setRecurso(Recurso recurso) {
this.recurso = recurso;
}
}
y el ManagedBean para PostgreSQL seria:
No hay comentarios:
Publicar un comentario