Upload e download de arquivo JSP
Neste exemplo, aprenderemos como fazer upload e download de um arquivo atravรฉs de JSP.
A saรญda de entrada de arquivo sรฃo operaรงรตes muito importantes. Aqui vamos ler e escrever um arquivo usando JSP.
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 enviando um arquivo usando o 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
Linha de cรณdigo 12-18: Aqui estamos criando um formulรกrio com campo de arquivo, que farรก o upload do arquivo para o servidor e a aรงรฃo serรก passada para action_file_upload.jsp
Action_file_upload.jsp
Linha de cรณdigo 20: Aqui estamos fornecendo o caminho do arquivo para um caminho especรญfico
Linha de cรณdigo 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 do arquivo, ele รฉ gravado no arquivo temporรกrio e entรฃo o arquivo temporรกrio รฉ convertido no arquivo principal.
Ao executar o cรณdigo acima, vocรช obtรฉm a seguinte saรญda
Saรญda:
Estamos carregando o arquivo usando a opรงรฃo escolher o botรฃo de arquivo e o botรฃo carregar o arquivo farรก o upload do arquivo para o servidor no caminho fornecido.
Exemplo: Usando operaรงรตes JSP
Neste exemplo, faremos upload de um arquivo usando operaรงรตes JSP. Pegaremos um formulรกrio que terรก um botรฃo โuploadโ e quando vocรช clicar no botรฃo upload, o arquivo serรก carregado.
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:
Linha de cรณdigo 11-12: Aqui estamos pegando um formulรกrio que tem aรงรฃo no servlet guru_upload que passarรก por um mรฉtodo POST. Alรฉm disso, aqui nรณs enctype o atributo ie que especifica como os dados do formulรกrio devem ser codificados e enviados ao servidor e ele รฉ usado apenas com o mรฉtodo POST. Aqui estamos definindo como multipart/form-data que รฉ para o arquivo (pois os dados serรฃo grandes).
Linha de cรณdigo 13: Aqui estamos especificando o elemento guru_file com o tipo file e fornecendo o tamanho 50.
Linha de cรณdigo 15: Este รฉ um botรฃo de tipo de envio com o nome โUploadโ atravรฉs do qual o servlet de aรงรฃo serรก chamado e a solicitaรงรฃo serรก processada nele e o arquivo serรก 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:
Linha de cรณdigo 12-14: Aqui teremos que importar a biblioteca org.apache.commons para a configuraรงรฃo do cรณdigo. Teremos que importar a classe fileupload da biblioteca org.apache.commons.
Linha de cรณdigo 23: Aqui temos o mรฉtodo doPost(), que serรก chamado conforme estivermos passando o mรฉtodo POST em JSP e ele solicitarรก e responderรก objetos como seus parรขmetros
Linha de cรณdigo 26: Aqui estamos criando um objeto da classe ServletFileUpload do pacote fileUpload da biblioteca org.apache.commons que irรก verificar se existe algum objeto de arquivo em JSP. Se algum for encontrado, esses objetos de arquivo serรฃo retirados da solicitaรงรฃo.
Linha de cรณdigo 27-32: Iremos iterar o nรบmero de arquivos verificando quantos itens de arquivo estรฃo presentes no objeto multiparts que รฉ um objeto de lista (se fizermos upload de mais de um arquivo) e salvรก-lo na pasta c:/guru/upload com o nome do arquivo que foi fornecido . Estamos gravando o arquivo usando o mรฉtodo write do objeto de arquivo na pasta que foi mencionada.
Linha de cรณdigo 34: Se nรฃo houver exceรงรฃo, estamos definindo o atributo na solicitaรงรฃo como gurumessage com valor โArquivo enviado com sucessoโ.
Linha de cรณdigo 35-36: Se ocorrer uma exceรงรฃo, serรก definida a mensagem โFalha no upload do arquivoโ
Linha de cรณdigo 40: Se o arquivo nรฃo for encontrado, defina a mensagem como โNenhum arquivo encontradoโ
Linha de cรณdigo 42: Encaminhando 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:
Linha de cรณdigo 10: Aqui estamos obtendo o atributo do objeto de solicitaรงรฃo com valor gurumessage em um objeto string.
Linha de cรณdigo11: Aqui estamos imprimindo essa mensagem.
Quando executamos o cรณdigo acima, obtemos a seguinte saรญda
Saรญda:
Obtemos um formulรกrio onde existem campos para escolher um arquivo do diretรณrio. Assim que o arquivo for selecionado, temos que clicar no botรฃo de upload.
Assim que o botรฃo de upload for clicado, receberemos a mensagem de que o arquivo foi carregado com sucesso.
No diagrama abaixo podemos ver que o arquivo foi carregado na 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:
Linha de cรณdigo 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:
Linha de cรณdigo 3-5: Aqui estamos importando FileInputStream , IO Exception e PrintWriter do pacote java.io.
Linha de cรณdigo 15: Estamos definindo guru_download servlet que estende HttpServlet.
Linha de cรณdigo 18: Como definimos um href, que serรก incluรญdo na URL, o mรฉtodo GET serรก processado (doGet serรก chamado no servlet), que tambรฉm inclui objetos de solicitaรงรฃo e resposta.
Linha de cรณdigo 19-20: Estamos definindo o tipo de conteรบdo no objeto de resposta e tambรฉm obtendo o objeto escritor da resposta.
Linha de cรณdigo 21-22: Definindo uma variรกvel como gurufile como valor test.txt e gurupath como c:/guru/upload/
Linha de cรณdigo 23-25: Estamos definindo o tipo de conteรบdo usando o objeto de resposta e usamos o mรฉtodo setHeader que define o cabeรงalho no objeto de resposta como o nome do arquivo que foi carregado.
Linha de cรณdigo 27-28: Estamos criando FileInputStream no qual adicionaremos gurupath+gurufile.
Linha de cรณdigo 31-33: Aqui tomamos uma loop while que serรก executado atรฉ que o arquivo seja lido, portanto, demos a condiรงรฃo! = -1. Nesta condiรงรฃo, estamos escrevendo usando o objeto printwriter out.
Ao executar o cรณdigo acima, vocรช obterรก a seguinte saรญda
Saรญda:
Saรญda:
Temos que clicar em download_1.jsp e obteremos um hiperlink como โBaixar aquiโ. Ao clicar neste arquivo de hiperlink, ele serรก baixado no sistema.
Resumo
- Aprendemos sobre o formulรกrio de registro para se registrar em qualquer aplicativo
- Aprendi mais sobre como funcionam os formulรกrios de login e logout.
- Tambรฉm aprendi sobre upload e download de um arquivo via JSP.





