Olá desenvolvedores, se vocês estão acompanhando esta série de tutoriais sobre upload de imagens em base64, sabe que nos deparamos com um problema. Implementamos no input um atributo que nos permite submeter um formulário que além de texto envia também anexos. Clique aqui para ser redirecionado para esta implementação.
O atributo multipart/form-data é necessário para tornar possível o upload, entretanto a presença deste atributo estava inibindo o envio dos campos de textos, e sem ele, não seria possível o upload. Assim, no tutorial de hoje trazemos a solução para este impasse.
O primeiro passo para a implementação visando corrigir este dilema é a importação da anotação @MultipartConfig do pacote javax.servlet.annotation.MultipartConfig, que deverá ser importado.
IMPLEMENTANDO A CONVERSÃO
Agora precisamos de um Array de bytes para converter o ImagemFoto para base64, mas a única abertura pra isso é o getInputStream() que é uma entrada de dados. Então teremos que converter o inputStream() em um Array de bytes e depois convertê-lo para a base64, e então passá-lo para o objeto e continuar o fluxo para salvar o objeto.
MÉTODO DE CONVERSÃO
Mas para que possamos proceder com todas estas conversões será necessário a criação de um método, que por parâmetro receberá a imagem.
Dentro do método instanciaremos o objeto ByteArrayOutputStream. E criaremos também uma variável para varrer e armazenar o tamanho do inputStream. Assim enquanto a variável que armazena o tamanho do inputStream for diferente de -1, ou seja, enquanto houver dados nela iremos armazená-los dentro do objeto.
Ou ainda, enquanto houver dados escreva o fluxo de dados, desse modo a próxima iteração é a continuação da leitura do tamanho do inputStream, e quando o fluxo de processamento dentro do while for concluída será retornado um ByteArray. De forma resumida as linhas de código abaixo cumprem o papel de converter a entrada de fluxo de dados da imagem em um Array de Bytes.
Temos agora um método cuja função é converter uma imagem para bytes, ou seja, um inputStream é passado e então entramos no método para convertê-lo para bytes. Assim, após a varredura os bytes são retornados para o objeto fotoBase64 que foi instanciado no início do bloco try.
E então “setamos” os dados que nos interessa da imagem para o usuário em questão.
EM POUCAS PALAVRAS
Da forma como implementamos agora conseguimos salvar no banco de dados não somente imagens, mas também arquivos de pdf. Aqui foi preciso implementar um método para converter a imagem em bytes, entretanto, o método simplifica a implementação dentro do laço de decisão, quando recebemos o dado retornado e o salvamos no banco. Eu fico por aqui e nós nos vemos no próximo tutorial.