Olá desenvolvedores, o tutorial de hoje traz a implementação do upload de PDF, visto que é bastante comum aplicações onde o usuário pode subir arquivos, como um currículo, por exemplo. E se você tem acompanhado nossos tutoriais, verá que é bem semelhante ao que fizemos com a imagem.

Aliás, a implementação que fizemos para upload da imagem/foto do usuário, também se aplica ao contexto dos arquivos. Quem é aluno do Formação Java Web pôde conferir nas aulas o teste onde subimos além da imagem um arquivo pdf.

Dessa forma, para o upload dos arquivos precisaremos apenas criar no banco de dados uma coluna para gravar os arquivos, e assim deixar cada campo relacionado a apenas uma única informação. E também na página de cadastro separar os campos para não deixar o usuário confuso, já falamos aqui sobre usabilidade e UX (User Experience). E temos também a máxima, “não me faça pensar”. Devemos simplificar ao máximo a vida para os usuários do nosso sistema.

IMPLEMENTANDO O UPLOAD NO JSP

E uma vez que cada tipo de arquivo terá o seu próprio campo e o seu próprio espaço na tabela, o que primeiro iremos fazer é criar mais uma célula na tabela para receber o pdf. Assim, na página de cadastroUsuario.jsp crie uma nova célula, e iremos assumir que o campo é para anexar um currículo.

Atualizando a página, note que ficará um logo abaixo do outro. É preciso ressaltar que meu objetivo aqui, é principalmente ensiná-los a lógica por traz da implementação de cada funcionalidade. De posse deste conhecimento, quando for implementar seus próprios sistemas, poderá escolher quais campos farão parte de acordo com as necessidades da sua aplicação. Dito isso, até o momento o formulário está como mostrado abaixo.

IMPLEMENTANDO O UPLOAD NO BANCO DE DADOS

Agora precisamos gravar o arquivo no banco de dados, porém antes, iremos criar o atributo no objeto usuário, na classe BeanCursoJsp.java. e tal como fizemos com a imagem gravaremos o arquivo em base64 e também a extensão dele. Gere para ambos os atributos e os métodos Getters e Setters.

private String curriculoBase64;
private String contentTypeCurriculo

Abra o seu pgAdmin selecione a base de dados e depois a tabela correspondente, E abra o SQL Editor. O que iremos fazer é alterar a tabela “usuario” adicionando a coluna contentTypeCurriculo e curriculoBase64, ambos do tipo text. Lembrando que text é um tipo para cadeia de caracteres com um comprimento de dados não limitado, ideal para situações em que não temos controle do tamanho do arquivo que iremos receber.

IMPLEMENTANDO O UPLOAD NO DAO

Na classe de conexão DaoUsuario.java, lembrando que toda ação que exige conexão com o banco de dados passa obrigatoriamente por esta classe DAO – Data Access Object. Assim no método salvar() passaremos os valores para a Query insert e “setaremos” os parâmetros.

A Query insert, contempla também os demais campos do formulário que provavelmente você implementou, mas aqui, para suprimir o excesso de informação deixarei apenas os parâmetros de upload, inclusive os da imagem.

String sql = “INSERT INTO usuario (fotoBase64, contetType, 
contentTypeCurriculo, curriculoBase64), VALUES (?,?,?,?)”;

O passo seguinte é recuperar os dados para posteriormente salvá-los, e novamente, suprimimos os valores anteriores para deixar o código mais limpo e nos concentrarmos apenas no upload.

E também precisaremos no método listar() adicionar o arquivo em base64 e o seu tipo a lista, para que possamos lista-los e também consultar no banco de dados no momento de adicionar ao objeto e então listar.

Agora as mesmas linhas de código serão adicionadas ao método consultar(), onde a consulta é feita a um único objeto.

IMPLEMENTANDO O UPLOAD NA SERVLET

O upload do arquivo será implementado no método doPost da servlet Usuario.java, onde implementamos a condição de upload para a imagem. Assim, criaremos um objeto do tipo Part e a variável curriculoPdf a qual receberá os dados que virão do formulário, como argumento passaremos a referência do atributo name. E somente iremos processar esta rotina se o currículo for diferente de nulo e assim evitar um NullPointerException.

E no escopo do if iremos instanciar o objeto base64 para então processar o arquivo. Mas atente-se, o objeto Part só retorna o InputStream. Então o que precisamos fazer é pegar o InputStream usar o método para convertê-lo para byte e depois utilizar o objeto encodeBase64String do Java para converter para base64, para assim termos uma string que possa ser adicionada ao banco de dados.

E assim iremos “setar” o currículo e o tipo de arquivo para dentro do objeto “usuario”.

TESTANDO O UPLOAD

Então inicie o servidor e teste o upload anexando um arquivo.pdf qualquer, e claro, confira no banco de dados se realmente o arquivo foi gravado com sucesso.

EM POUCAS PALAVRAS

E está pronto a implementação do upload do pdf, e uma vez que fizemos primeiro para a imagem, não foi difícil a implementação para o arquivo, bastou apenas seguir a mesma lógica. Agora falta ainda a implementação para o download. Eu fico por aqui e nos vemos no próximo tutorial.