Vamos ao que importa, hoje estava escrevendo uma classe simples para um amigo de upload de arquivos no framework Struts.
Aqui temos a classe Action:
package br.cbenato.upload;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileUpload;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.upload.FormFile;
public class UploadAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws Exception {
boolean isMultipart = FileUpload.isMultipartContent(request);
boolean uploadDone = false;
ActionErrors errors = new ActionErrors();
ActionForward forward = new ActionForward();
//Verificando se é uma requisição multipart
if (isMultipart) {
// Pegando o formulário
UploadForm uploadForm = (UploadForm) form;
//Pegando o File do formulário
FormFile formFile = uploadForm.getMyFile();
//Pegando o nome do arquivo
String strFileName = formFile.getFileName();
//Pegando os dados contidos dentro do arquivo que foi feito o upload
byte dataFile[] = formFile.getFileData();
//Realizando a criação do arquivo
File file = new File("C:\\" + strFileName);
//Criando um output stream... é como se fosse ligado uma mangueira no arquivo e você vá bombear os dados através dessa mangueira
OutputStream out = new FileOutputStream(file);
//Aqui os dados são bombeados para o arquivo
out.write(dataFile);
//Aqui é espremido a mangueira para enviar todos os dados e uma chacoalhada no balde para acomodar os dados
out.flush();
//Retirado a mangueira do balde(Arquivo)
out.close();
//Variável para confirmar que o upload foi concluido
uploadDone = true;
} else {
//Adicionando o erro
errors.add(
ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("erro-upload"));
}
if (uploadDone == false) {
errors.add(
//Adicionando mais erros caso não consiga concluir o upload
ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("erro-upload"));
}
if (errors.isEmpty() == false) {
//Caso haja falhar salvar os erros e definir forward como FAIL
saveErrors(request, errors);
forward = mapping.findForward("FAIL");
} else {
//Caso o upload tenha concluido sem problemas define forward como SUCCESS
forward = mapping.findForward("SUCCESS");
}
//RETORNA FAIL OU FORWARD
return (forward);
}
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileUpload;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.upload.FormFile;
public class UploadAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws Exception {
boolean isMultipart = FileUpload.isMultipartContent(request);
boolean uploadDone = false;
ActionErrors errors = new ActionErrors();
ActionForward forward = new ActionForward();
//Verificando se é uma requisição multipart
if (isMultipart) {
// Pegando o formulário
UploadForm uploadForm = (UploadForm) form;
//Pegando o File do formulário
FormFile formFile = uploadForm.getMyFile();
//Pegando o nome do arquivo
String strFileName = formFile.getFileName();
//Pegando os dados contidos dentro do arquivo que foi feito o upload
byte dataFile[] = formFile.getFileData();
//Realizando a criação do arquivo
File file = new File("C:\\" + strFileName);
//Criando um output stream... é como se fosse ligado uma mangueira no arquivo e você vá bombear os dados através dessa mangueira
OutputStream out = new FileOutputStream(file);
//Aqui os dados são bombeados para o arquivo
out.write(dataFile);
//Aqui é espremido a mangueira para enviar todos os dados e uma chacoalhada no balde para acomodar os dados
out.flush();
//Retirado a mangueira do balde(Arquivo)
out.close();
//Variável para confirmar que o upload foi concluido
uploadDone = true;
} else {
//Adicionando o erro
errors.add(
ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("erro-upload"));
}
if (uploadDone == false) {
errors.add(
//Adicionando mais erros caso não consiga concluir o upload
ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("erro-upload"));
}
if (errors.isEmpty() == false) {
//Caso haja falhar salvar os erros e definir forward como FAIL
saveErrors(request, errors);
forward = mapping.findForward("FAIL");
} else {
//Caso o upload tenha concluido sem problemas define forward como SUCCESS
forward = mapping.findForward("SUCCESS");
}
//RETORNA FAIL OU FORWARD
return (forward);
}
}
E Aqui a classe Form:
package br.cbenato.upload;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
/**
*
* @author Cristiano Benato
*/
public class UploadForm extends ActionForm {
private FormFile myFile = null;
public FormFile getMyFile() {
return myFile;
}
public void setMyFile(FormFile file) {
myFile = file;
}
@Override
public void reset(ActionMapping mapping, HttpServletRequest request) {
myFile = null;
}
@Override
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
return errors;
}
}
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
/**
*
* @author Cristiano Benato
*/
public class UploadForm extends ActionForm {
private FormFile myFile = null;
public FormFile getMyFile() {
return myFile;
}
public void setMyFile(FormFile file) {
myFile = file;
}
@Override
public void reset(ActionMapping mapping, HttpServletRequest request) {
myFile = null;
}
@Override
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
return errors;
}
}
E agora o Action e o bean que devem ser colocados no struts-config:
<form-bean name="uploadForm" type="br.cbenato.upload.UploadForm"/>
<action path="/upload" type="br.cbenato.upload.UploadAction" name="uploadForm" validate="true">
<forward name="SUCCESS" path="/upload2.jsp"/>
<forward name="FAIL" path="/erro.jsp"/>
</action>
<forward name="SUCCESS" path="/upload2.jsp"/>
<forward name="FAIL" path="/erro.jsp"/>
</action>
Enfim as páginas:
upload.JSP
<%--
Document : Upload
Created on : 20/01/2010, 17:43:50
Author : Cristiano Benato
--%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>Upload - Cristiano Benato</TITLE>
</HEAD>
<BODY>
<html:form action="/upload.do" enctype="multipart/form-data">
Escolha o arquivo:<html:file property="myFile"/><br>
<html:submit value="Upload File"/>
</html:form>
</BODY>
</HTML>
Document : Upload
Created on : 20/01/2010, 17:43:50
Author : Cristiano Benato
--%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>Upload - Cristiano Benato</TITLE>
</HEAD>
<BODY>
<html:form action="/upload.do" enctype="multipart/form-data">
Escolha o arquivo:<html:file property="myFile"/><br>
<html:submit value="Upload File"/>
</html:form>
</BODY>
</HTML>
-upload2.JSP
<%--
Document : upload2
Created on : 20/01/2010, 17:30:10
Author : Cristiano Benato
--%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<META name="GENERATOR" content="IBM WebSphere Studio">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>Upload de Arquivos</TITLE>
</HEAD>
<BODY>
<h1>Upload realizado com sucesso.</h1:>
</BODY
</HTML>
Document : upload2
Created on : 20/01/2010, 17:30:10
Author : Cristiano Benato
--%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<META name="GENERATOR" content="IBM WebSphere Studio">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>Upload de Arquivos</TITLE>
</HEAD>
<BODY>
<h1>Upload realizado com sucesso.</h1:>
</BODY
</HTML>
-erro.JSP
<%--
Document : Erro
Created on : 05/01/2010, 18:52:52
Author : Cristiano Benato
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>ERRO UPLOAD - Cristiano Benato</title>
</head>
<body>
<h1>Erro no upload!!!!!!!!!!!!!</h1>
</body>
</html>
Document : Erro
Created on : 05/01/2010, 18:52:52
Author : Cristiano Benato
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>ERRO UPLOAD - Cristiano Benato</title>
</head>
<body>
<h1>Erro no upload!!!!!!!!!!!!!</h1>
</body>
</html>