Olá, dando sequência a implementação que nos possibilita o upload de imagens e arquivos, hoje iremos falar um pouco mais sobre a base64. Na parte 1 deste tutorial fomos apresentados ao conceito convertendo a imagem em base64 para transformá-la em um tipo de arquivo que poderia ser trafegado de um lado para outro.
ENTENDENDO A BASE64
E de fato é isso, base64 é um tipo de codificação de dados para transferência na internet. Desse modo é possível transmitir dados binários, por meio de transmissões que lidam apenas com textos, como enviar arquivos anexados em uma submissão de formulário.
A codificação base64 é formada por 64 caracteres e daí a origem do nome. Mas não é restrito a imagem, pode ser aplicado também a pdf, zip, entre outros. E é possível transferi-los dentro de uma página HTML, em um arquivo de texto, ou ainda colocá-lo dentro de um banco de dados.
Veja a imagem abaixo, ela destaca um padrão para identificação de arquivos da base64, tanto para a imagem quanto qualquer outro tipo de arquivo. E atente-se, é preciso esta estrutura para possibilitar o download. E quanto ao upload, o que irá ser gravado é o que está a partir do fim da estrutura destacada.
Assim o que precisaremos gravar é o arquivo em si, isto é, a codificação, e o tipo de arquivo. Note, na imagem abaixo removemos a codificação para deixar o arquivo um pouco mais limpo e assim auxiliar no entendimento. O tipo de arquivo é descrito antes da parte em destaque. image/png para imagem e application/pdf para um arquivo pdf.
IMPLEMENTANDO O UPLOAD NA SERVLET
Em Java o atributo a nos fornecer a especificação do arquivo é o ContentType, dessa forma os dois valores que iremos gravar, isto é, a imagem em base64 e o tipo de arquivo serão implementados como exemplificado abaixo.
E estes atributos, o fotoBase64 e o contentType precisam ser criados no objeto BeanCursoJsp, pois é quem especifica o usuário, e consequentemente gerar os getters e setters de cada um.
private String BeanCursoJsp;
private String contentType;
E de volta a servlet iremos “setar” os dados do upload.
O próximo passo é passar estes valores para a Query insert e “setar” os parâmetros. E obviamente suprimimos os demais valores do insert.
String sql = “INSERT INTO usuario (fotoBase64, contetType), VALUES (?, ?)”;
E agora iremos recuperar estes dados para posteriormente salvá-los, e novamente, suprimimos os valores anteriores para deixar o código mais limpo e nos concentrarmos apenas no upload.
CRIANDO CAMPO BASE64
É preciso criar o campo que receberá o arquivo em base64 no banco de dados. Este campo é também um tipo de texto, mas não tal como conhecemos. Outro ponto a considerar é que não sabemos antecipadamente o tamanho da imagem.
Selecione a tabela usuários, ou a sua tabela correspondente e clique no Query Tool. iremos alterar a tabela “usuario” adicionando a coluna fotoBse64 do tipo text.
O text é um tipo para cadeia de caracteres com um comprimento de dados não limitado, ideal para este caso em que não temos controle do tamanho do arquivo que iremos receber. O mesmo raciocínio se aplica para a criação do campo contenttype.
E agora é só iniciar o servidor e testar a aplicação, veja que está funcionando corretamente salvando todos os dados, textos e imagens. É sempre bom ressaltar a importância de verificar o banco de dados para constatar se os dados estão sendo guardados da forma como se espera.
EM POUCAS PALAVRAS
O tutorial de hoje, nos apresentou o conceito e como funciona o upload de imagens em base64, técnica amplamente utilizada para upload de arquivos. Esta é a forma recomendada de se trabalhar com upload de imagens e arquivos. Eu fico por aqui e nós nos vemos no próximo tutorial.