Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Upload de arquivos Java Web

Olá pessoal! Estou desenvolvendo com Java puro um Sistema de Cadastro em Arquitetura MVC, e com o Banco POstgreSQL. Ao cadastrar o usuário quero que ele faça o upload de arquivos PDF para serem salvos no banco. Pesquisei, mas fiquei confuso de como implementar, alguns disseram que deveria converter o arquivo blob para byte, outros disseram que deveria fazer uma DAO só para isso, mas sei ao certo como prosseguir. Conto com vocês para me dar uma luz, desde já obrigado!

1 resposta

Oi David,

Dá para fazer de ambas as formas que você comentou.

Por exemplo, com um modelo "Usuário" que identificação, nome e foto. Armazenaremos uma imagem na propriedade de foto do Usuário e a mapearemos para um BLOB:

@Entity
@Table(name="user")
public class User {

    @Id
    private String id;

    @Column(name = "name", columnDefinition="VARCHAR(128)")
    private String name;

    @Lob
    @Column(name = "photo", columnDefinition="BLOB")
    private byte[] photo;

    // ...
}

A anotação @Lob especifica que o banco de dados deve armazenar a propriedade como um Objeto Grande . O columnDefinition na anotação @Column define o tipo de coluna para a propriedade.

Como vamos salvar a matriz de bytes , estamos usando BLOB.

Criando a instância de Usuário:

User user = new User();

InputStream inputStream = this.getClass()
  .getClassLoader()
  .getResourceAsStream("profile.png");

if(inputStream == null) {
    fail("Unable to get resources");
}
user.setId("1");
user.setName("User");
user.setPhoto(IOUtils.toByteArray(inputStream));

LOB é o tipo de dados para armazenar dados de objetos grandes. Existem duas variedades de LOB, chamadas BLOB e CLOB . BLOB é para armazenar dados binários, enquanto CLOB é para armazenar dados de texto.