Upload e download de arquivo JSP
⚡ Resumo Inteligente
O envio e o download de arquivos via JSP são operações essenciais de entrada e saída que permitem que uma aplicação web receba arquivos de usuários e os envie de volta para eles. Este recurso explica ambos os fluxos usando formulários de ação JSP, o Apache Commons FileUpload e classes de servlet, com código completo e funcional.

Upload de arquivo JSP
- Podemos fazer upload de qualquer arquivo usando JSP.
- Pode ser um arquivo de texto, arquivo binário, arquivo de imagem ou qualquer outro documento.
- Aqui, no caso de upload de arquivo, apenas o método POST será utilizado e não o método GET.
- O atributo Enctype deve ser definido como multipart/form-data.
Exemplo: Usando Ação
Neste exemplo, estamos carregando um arquivo usando um objeto IO.
Action_file.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru File</title> </head> <body> <a>Guru File Upload:</a> Select file: <br /> <form action="action_file_upload.jsp" method="post" enctype="multipart/form-data"> <input type="file" name="file" size="50" /> <br /> <input type="submit" value="Upload File" /> </form> </body> </html>
Action_file_upload.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page import="java.io.*,java.util.*, javax.servlet.*" %> <%@ page import="javax.servlet.http.*" %> <%@ page import="org.apache.commons.fileupload.*" %> <%@ page import="org.apache.commons.fileupload.disk.*" %> <%@ page import="org.apache.commons.fileupload.servlet.*" %> <%@ page import="org.apache.commons.io.output.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru File Upload</title> </head> <body> <% File file ; int maxFileSize = 5000 * 1024; int maxMemSize = 5000 * 1024; String filePath = "E:/guru99/data"; String contentType = request.getContentType(); if ((contentType.indexOf("multipart/form-data") >= 0)) { DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(maxMemSize); factory.setRepository(new File("c:\\temp")); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax( maxFileSize ); try{ List fileItems = upload.parseRequest(request); Iterator i = fileItems.iterator(); out.println("<html>"); out.println("<body>"); while ( i.hasNext () ) { FileItem fi = (FileItem)i.next(); if ( !fi.isFormField () ) { String fieldName = fi.getFieldName(); String fileName = fi.getName(); boolean isInMemory = fi.isInMemory(); long sizeInBytes = fi.getSize(); file = new File( filePath + "yourFileName") ; fi.write( file ) ; out.println("Uploaded Filename: " + filePath + fileName + "<br>"); } } out.println("</body>"); out.println("</html>"); }catch(Exception ex) { System.out.println(ex); } }else{ out.println("<html>"); out.println("<body>"); out.println("<p>No file uploaded</p>"); out.println("</body>"); out.println("</html>"); } %> </body> </html>
Explicação do código:
Action_file.jsp
Code Linha 12-18: Aqui estamos criando um formulário com um campo de arquivo, que fará o upload de um arquivo para o servidor, e a ação será passada para o arquivo action_file_upload.jsp.
Action_file_upload.jsp
Code Linha 20: Aqui estamos fornecendo o caminho do arquivo para um caminho específico.
Code Linha 23-38: Aqui verificamos se o tipo de conteúdo é multipart/form-data. Se for esse o caso, o conteúdo é do tipo arquivo e é lido. Após a leitura, o arquivo é gravado em um arquivo temporário, que então é convertido no arquivo principal.
Ao executar o código acima, você obtém a seguinte saída:
Saída:
Estamos enviando um arquivo usando a opção "Escolher arquivo", e o botão "Enviar arquivo" enviará o arquivo para o servidor no caminho fornecido.
Exemplo: Usando operações JSP
Neste exemplo, vamos fazer o upload de um arquivo usando operações JSP. Criaremos um formulário com um botão "upload" e, ao clicar nesse botão, o arquivo será enviado.
Carregando_1.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru Uploading File</title> </head> <body> File: <br /> <form action="guru_upload" method="post" enctype="multipart/form-data"> <input type="file" name="guru_file" size="50" /> <br /> <input type="submit" value="Upload" /> </form> </body> </html>
Explicação do código:
Code Linha 11-12: Aqui, estamos usando um formulário que possui uma ação no servlet `guru_upload`, que será enviada por meio do método POST. Além disso, o atributo `enctype` especifica como os dados do formulário devem ser codificados e enviados ao servidor, e é usado apenas com o método POST. Neste caso, estamos definindo-o como `multipart/form-data`, que é adequado para arquivos (já que os dados serão grandes).
Code Linha 13: Aqui estamos especificando o elemento guru_file com o tipo arquivo e definindo o tamanho como 50.
Code Linha 15: Este é um botão do tipo "Enviar" com o nome "Upload", através do qual o servlet de ação será chamado e a solicitação será processada, sendo o arquivo lido e gravado no servlet.
Guru_upload.java
package demotest; import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class guru_upload extends HttpServlet { private static final long serialVersionUID = 1L; public guru_upload() { super(); // TODO Auto-generated constructor stub } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if(ServletFileUpload.isMultipartContent(request)){ try { List <FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); for(FileItem item : multiparts){ if(!item.isFormField()){ String name = new File(item.getName()).getName(); item.write( new File("c:/guru/upload" + File.separator + name)); } } //File uploaded successfully request.setAttribute("gurumessage", "File Uploaded Successfully"); } catch (Exception ex) { request.setAttribute("gurumessage", "File Upload Failed due to " + ex); } }else{ request.setAttribute("gurumessage","No File found"); } request.getRequestDispatcher("/result.jsp").forward(request, response); } }
Explicação do código:
Code Linha 12-14: Aqui, precisaremos importar a biblioteca org.apache.commons na configuração do código. Precisaremos importar a classe fileupload da biblioteca org.apache.commons.
Code Linha 23: Aqui temos o método doPost(), que será chamado quando passarmos o método POST no JSP, e ele receberá objetos de requisição e resposta como parâmetros.
Code Linha 26: Aqui, estamos criando um objeto da classe ServletFileUpload do pacote fileUpload da biblioteca org.apache.commons, que verificará se existem objetos de arquivo no JSP. Se algum for encontrado, esses objetos de arquivo serão obtidos da requisição.
Code Linha 27-32: Iremos iterar sobre o número de arquivos verificando quantos itens de arquivo estão presentes no objeto multiparts, que é um objeto de lista (se enviarmos mais de um arquivo), e salvá-lo na pasta c:/guru/upload com o nome de arquivo fornecido. Estamos escrevendo o arquivo usando o método write do objeto file na pasta especificada.
Code Linha 34: Caso não haja exceção, definimos um atributo na solicitação como gurumessage com o valor “Arquivo enviado com sucesso”.
Code Linha 35-36: Caso ocorra uma exceção, exibimos a mensagem "Falha no envio do arquivo".
Code Linha 40: Se o arquivo não for encontrado, a mensagem exibida será "Nenhum arquivo encontrado".
Code Linha 42: Encaminhando a solicitação usando o objeto requestdispatcher para result.jsp com objetos de solicitação e resposta.
Resultado.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Guru Result</title> </head> <body> <% String msg = (String)request.getAttribute("message"); out.println(msg); %> </body> </html>
Explicação do código:
Code Linha 10: Aqui estamos obtendo o atributo do objeto de requisição com o valor "gurumessage" e convertendo-o em um objeto string.
Code Linha 11: Aqui estamos imprimindo essa mensagem.
Quando executamos o código acima, obtemos a seguinte saída:
Saída:
Aparece um formulário com campos para escolher um arquivo do diretório. Depois de selecionar o arquivo, basta clicar no botão de upload.
Assim que o botão de upload é clicado, recebemos a mensagem de que o arquivo foi carregado com sucesso.
No diagrama abaixo, podemos ver que o arquivo foi carregado para a pasta c:/guru/upload.
Download do arquivo JSP
Neste exemplo, vamos baixar um arquivo de um diretório clicando no botão.
Baixando_1.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Downloading Guru Example</title> </head> <body> Guru Downloading File<a href="guru_download">Download here!!!</a> </body> </html>
Explicação do código:
Code Linha 10: Aqui fornecemos um link para baixar um arquivo da pasta c:/guru/upload usando o servlet guru_download.
Guru_download.java
package demotest; import java.io.FileInputStream; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class guru_download */ public class guru_download extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String gurufile = "test.txt"; String gurupath = "c:/guru/upload/"; response.setContentType("APPLICATION/OCTET-STREAM"); response.setHeader("Content-Disposition", "attachment; filename=\"" + gurufile + "\""); FileInputStream fileInputStream = new FileInputStream(gurupath + gurufile); int i; while ((i = fileInputStream.read()) != -1) { out.write(i); } fileInputStream.close(); out.close(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }
Explicação do código:
Code Linha 3-5: Aqui estamos importando FileInputStream, IOException e Print.Writer do pacote java.io.
Code Linha 15: Estamos definindo o guru_download servlet que estende HttpServlet.
Code Linha 18: Como definimos um href, que será envolvido em um URLAssim, o método GET será processado (o método doGet será chamado no servlet), que também inclui os objetos de requisição e resposta.
Code Linha 19-20: Estamos definindo o tipo de conteúdo no objeto de resposta e também obtendo o objeto de escritor da resposta.
Code Linha 21-22: Definindo uma variável como gurufile com o valor test.txt e gurupath como c:/guru/upload/.
Code Linha 23-25: Estamos definindo o tipo de conteúdo usando o objeto de resposta e utilizamos o método setHeader, que define o cabeçalho no objeto de resposta como o nome do arquivo que foi carregado.
Code Linha 27-28: Estamos criando um FileInputStream no qual adicionaremos gurupath+gurufile.
Code Linha 31-33: Aqui tomamos uma loop while que será executada até que o arquivo seja lido, portanto, definimos a condição como != -1. Nessa condição, estamos escrevendo usando o objeto printwriter.
Ao executar o código acima, você obterá a seguinte saída:
Saída:
Precisamos clicar em downloading_1.jsp, e obteremos um hiperlink com o texto “Baixar aqui”. Ao clicar nesse hiperlink, o arquivo será baixado para o seu computador.





