Cá estou eu novamente... ansioso pelo treinamento da semana que vem (ESRI - ArcObjects com Java e Aplicações com ArcGIS Server JAVA) e Também esperançoso pelos belos horizontes que estão por vir.
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);
}
}
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;
}
}
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>
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>
-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>
-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>