Upload com WebWork
5 Comentários Publicado por Guilherme em terça-feira, outubro 10, 2006 at 8:09 AM.
Tenho visto muita gente com dificuldade em criar um upload no WebWork. Nesse post demonstrarei como é bastante simples criar um upload utilizando o suporte ao Commons FileUpload do WebWork.
Primeiro passo: criar a actionNa action precisamos apenas criar os seguintes atributos: file, contentType e fileName para que o WebWork identifique que será realizado o upload.
Segundo passo: configurar o arquivo webwork.properties
webwork.multipart.parser=jakarta
webwork.multipart.saveDir=C:/uploads/
Ao configurar o parser como jakarta, definimos que o upload será feito através do Commons FileUpload .
Terceiro passo: criar o formulário de upload
utilizamos a tag <ww:file> e para submeter o formulário, utilizamos a tag <ww:submit>.
Quarto passo: configurar a action no arquivo xwork.xml
A partir dessa configuração poderíamos realizar o upload sem grandes problemas, só que o interceptor fileUpload realiza uma limpeza nos arquivos e por consequência todos os arquivos que sofreram upload serão excluídos. Para contornar isso, podemos copiar o upload para um diretório específico.
Retire a seguinte linha do arquivo webwork.properties:
webwork.multipart.saveDir=C:/uploads/
E crie o seguinte método que é responsável por copiar o arquivo para um diretório:E para utilizar esse método na action:Não se esqueça de colocar o jar do Commons FileUpload no classpath !
Primeiro passo: criar a action
public class UploadAction extends ActionSupport {
private File file;
private String contentType;
private String filename;
public void setUpload(File file) {
this.file = file;
}
public void setUploadContentType(String contentType) {
this.contentType = contentType;
}
public void setUploadFileName(String filename) {
this.filename = filename;
}
public String execute() throws Exception {
if (file == null) {
return INPUT;
}
}
}
Segundo passo: configurar o arquivo webwork.properties
webwork.multipart.parser=jakarta
webwork.multipart.saveDir=C:/uploads/
Ao configurar o parser como jakarta, definimos que o upload será feito através do Commons FileUpload .
Terceiro passo: criar o formulário de upload
<ww:form method="POST" action="upload.action" enctype="multipart/form-data">
<ww:file name="upload"/>
<ww:submit>
</ww:form>
Para construir o formulário, utilizamos a tag <ww:form>. Para gerar o campo de upload,<ww:file name="upload"/>
<ww:submit>
</ww:form>
utilizamos a tag <ww:file> e para submeter o formulário, utilizamos a tag <ww:submit>.
Quarto passo: configurar a action no arquivo xwork.xml
<action name="upload" class="br.com.action.UploadAction">
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="basicStack"/>
<result name="success">success_upload.jsp</result>
<result name="input">input_upload.jsp</result>
</action>
Para configurarmos o upload, basta referenciar o interceptor fileUpload na declaração da action.<interceptor-ref name="fileUpload"/>
<interceptor-ref name="basicStack"/>
<result name="success">success_upload.jsp</result>
<result name="input">input_upload.jsp</result>
</action>
A partir dessa configuração poderíamos realizar o upload sem grandes problemas, só que o interceptor fileUpload realiza uma limpeza nos arquivos e por consequência todos os arquivos que sofreram upload serão excluídos. Para contornar isso, podemos copiar o upload para um diretório específico.
Retire a seguinte linha do arquivo webwork.properties:
webwork.multipart.saveDir=C:/uploads/
E crie o seguinte método que é responsável por copiar o arquivo para um diretório:
public void copyFile(File in, File out) throws IOException {
FileChannel sourceChannel = new FileInputStream(in).getChannel();
FileChannel destinationChannel = new FileOutputStream(out).getChannel();
sourceChannel.transferTo(0, sourceChannel.size(), destinationChannel);
sourceChannel.close();
destinationChannel.close();
}
public class UploadAction extends ActionSupport {
private File file;
private String contentType;
private String filename;
public void setUpload(File file) {
this.file = file;
}
public void setUploadContentType(String contentType) {
this.contentType = contentType;
}
public void setUploadFileName(String filename) {
this.filename = filename;
}
public String execute() throws Exception {
if (file == null) {
return INPUT;
}
copyFile(file, new File("C:/uploads/" + filename));
return SUCCESS;
}
public static void copyFile(File in, File out) throws IOException {
FileChannel sourceChannel = new FileInputStream(in).getChannel();
FileChannel destinationChannel = new FileOutputStream(out).getChannel();
sourceChannel.transferTo(0, sourceChannel.size(), destinationChannel);
sourceChannel.close();
destinationChannel.close();
}
}
Olá Guilherme... gostei bastante do tutorial de Upload de Arquivos com WW... Eu estava com dificuldades sobre o assunto...
Obrigado
Valeu! Aguarde mais tutoriais sobre o WW.
Ola Guilherme, gostei do tutorial ajudou um pouco, só que o File sempre está vindo como null.
Você sabe pq?
muito bom, segui o tutorial so q utilizando struts 2 e funcionou perfeitamente.
Cara, valeu mesmo!