Pessoal,
Muita gente tem perguntado como fazer upload com struts 2, então Guilherme Mello perguntou se não dava para eu postar um totorial no forum, entao vamos lá.
1 - Primeiramente deve-se importar os jar’s commons-fileupload-1.1.1.jar e o commons-io-1.1.jar para sua libraries.
2 - Se você não possui um arquivo struts-default.properties vc deve cria-lo no mesmo diretorio em que esta o arquivo struts.xml
Nesse arquivo struts-default.properties vc deve setar os seguintes parametros:
struts.multipart.parser=jakarta //Para utilizar as libs da apache
struts.multipart.maxSize=2097152 //seta o tamanho maximo do upload
#struts.multipart.saveDir=D:/uploads/ //Seta a pasta padrão para o upload dos arquivos, desabilitei esta linha pois setaremos a pasta via código
Não é obrigatório setar os parâmetros acima no arquivo struts.properties, pois por padrão o Struts 2 utliza o Jakarta como parser. Dessa forma basta apenas realizar a cópia do arquivo para uma pasta.
3 - Criaremos o arquivo “upload.jsp” com o seguinte formulario:
<s:form action="doUpload" method="POST" enctype="multipart/form-data">
<s:file name="upload" label="File"/>
<s:submit />
</s:form>
4 - Agora vamos Criar nossa Action, no meu caso criei dentro da pakage portaljava
public class FileUploadAction extends ActionSupport {
private File upload;
private String uploadFileName; //nome do arquivo enviado
private String uploadContentType; //contexto do arquivo, imagem, txt etc...
public File getUpload() {
return upload;
}
public String moveArquivo(){
copyFile(upload, new File("c:\\uploads\\"+ uploadFileName));
return "SUCCESS";
}
// Metodo que move o arquivo para o diretorio desejado
private static void copyFile(File in, File out) {
try {
FileChannel sourceChannel = new FileInputStream(in).getChannel();
FileChannel destinationChannel = new FileOutputStream(out).getChannel();
sourceChannel.transferTo(0, sourceChannel.size(), destinationChannel);
sourceChannel.close();
destinationChannel.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
public void setUpload(File upload) {
this.upload = upload;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
}
5 - Agora vamos configurar o struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="portaljava" extends="struts-default" >
<action name="upload" class="portaljava.FileUploadAction" method="input">
<result>upload.jsp</result>
</action>
<action name="doUpload" class="portaljava.FileUploadAction" method="upload">
<result name="input">upload.jsp</result>
<result>upload-success.jsp</result>
</action>
</package>
</struts>
6 - Agora pra finalizar vamos criar a pagina upload-success.jsp que mostrará o resultado da transferencia.
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Exemplo Upload - Portal Java</title>
</head>
<body>
<h1>File Upload</h1>
<p>
<ul>
<li>ContentType: <s:property value="uploadContentType" /></li>
<li>FileName: <s:property value="uploadFileName" /></li>
<li>File: <s:property value="upload" /></li>
</ul>
</p>
</body>
</html>
É isso ai pessoal, espero ter contribuido com a comunidade.
[], Paulo