Olá desenvolvedores, neste tutorial iremos criar a camada de modelo para que possamos fazer o upload e download de imagens. A camada de modelo faz parte de um padrão de arquitetura de software que separa a aplicação em três camadas. Essas camadas compreendem a view que é parte de iteração com o usuário, a camada model, objeto de nosso estudo que é onde a manipulação dos dados ocorre e controller que é a camada de controle.
Este padrão é mais conhecido pelo acrônimo MVC – Model-View-Controller (Modelo-Visão-Controle). Tendo esclarecido um pouco do padrão MVC, neste tutorial iremos implementar uma rotina de upload e download de imagens com o JSF – JavaServer Faces, puro.
IMPLEMENTAÇÃO DA ROTINA
Para implementar a rotina de upload e download começaremos pela parte de manipulação de dados, pela camada de modelo. Desse modo na Entidade pessoa criaremos três atributos que serão transformados em colunas na tabela na base de dados. Esses dois atributos gravarão a extensão da imagem, a imagem em tamanho normal e em miniatura (formato de texto) respectivamente.
É importante ter uma imagem em miniatura para ser carregada na tela, visto que a imagem original poderá ter 5MB ou mais. Assim, um dos atributos será para gravar a imagem em formato de texto, isto é, em base64.
A base64 é muito usada para transferir arquivos em formato de texto, como por exemplo, transferir uma imagem por e-mail. Desse modo a imagem é enviada em formato de texto e quando chega ao destino ela é decodificada. O atributo deverá ser precedido pela anotação @Column que definirá um tamanho para o campo
@Column(columnDefinition= “text”)
private String fotoIconBase64;
E os dois outros atributos, serão, como mencionado para gravar a extensão da imagem, e a imagem em seu tamanho normal, para este último o atributo será do tipo Byte Array. E ao trabalharmos com Byte Array devemos usar a anotação @Lob, utilizada geralmente para gravar arquivos na base de dados. Usaremos também uma anotação que fará com que a imagem seja carregada apenas quando for chamada. Para todos os atributos gere os métodos Getters and Setters.
private String extensão;
@Lob
@Basic(fetch=FetchType.Lazy)
private byte[] fotoIconBase64Original;
EM POUCAS PALAVRAS
Neste tutorial estruturamos a camada de modelo, criando no banco de dados os campos que irão receber a foto em miniatura (formato de texto), a extensão e a imagem em tamanho original. No próximo tutorial começaremos a implementar a rotina de upload e download.