Upload com Struts

Pessoal estou tendo o sequinte problema ao tentar fazer upload atraves do Struts2. Aguem pode me ajudar??

[code]HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.RuntimeException: Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location]
com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:136)
com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:476)
com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:486)
com.opensymphony.xwork2.inject.ContainerImpl$9.call(ContainerImpl.java:517)
com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:542)
com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:515)
org.apache.struts2.dispatcher.Dispatcher.wrapRequest(Dispatcher.java:697)
org.apache.struts2.dispatcher.FilterDispatcher.prepareDispatcherAndWrapRequest(FilterDispatcher.java:330)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:390)

root cause

Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (jakarta) - [unknown location]
org.apache.struts2.config.BeanSelectionProvider$ObjectFactoryDelegateFactory.create(BeanSelectionProvider.java:247)
com.opensymphony.xwork2.inject.ContainerBuilder$4.create(ContainerBuilder.java:134)
com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:476)
com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:486)
com.opensymphony.xwork2.inject.ContainerImpl$9.call(ContainerImpl.java:517)
com.opensymphony.xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:542)
com.opensymphony.xwork2.inject.ContainerImpl.getInstance(ContainerImpl.java:515)
org.apache.struts2.dispatcher.Dispatcher.wrapRequest(Dispatcher.java:697)
org.apache.struts2.dispatcher.FilterDispatcher.prepareDispatcherAndWrapRequest(FilterDispatcher.java:330)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:390)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.[/code]

Seque minha jsp

[code]

<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<title>File Upload Example</title>

</head>

<body>

<s:actionerror />
<s:fielderror />
<s:form action="salvarUpload" method="POST" enctype="multipart/form-data">
<tr>
<td colspan="2"><h1>File Upload Example</h1></td>
</tr>

<s:file name="upload" label="File"/>
<s:textfield name="caption" label="Caption"/>
<s:submit />
</s:form>
</body>
</html>[/code]

Coloque sua action e arquivo de configuração do Struts2 aqui para que possamos analisar melhor. Provavelmente você não fez a configuração da forma correta.

Seque o arquivo struts.xml valeu, pela ajuda.

[code]
<?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>

&lt;include file=&quot;struts-default.xml&quot; /&gt;

&lt;constant name=&quot;struts.enable.DynamicMethodInvocation&quot; value=&quot;true&quot; /&gt;
&lt;constant name=&quot;struts.devMode&quot; value=&quot;false&quot; /&gt;

&lt;package name=&quot;default&quot; extends=&quot;struts-default&quot; namespace=&quot;/fileupload&quot;&gt;

	&lt;action name=&quot;salvarUpload&quot; class=&quot;br.inf.bluestar.SalvarArquivo&quot; method=&quot;execute&quot;&gt;
		&lt;result name=&quot;ok&quot;&gt;/index.jsp&lt;/result&gt;
	&lt;/action&gt;

&lt;/package&gt;

</struts>[/code]

O primeiro problema que eu detectei, é que você não adicionou o interceptor de FileUpload na sua action. Dê uma olhada na documentação do Struts2, pois lá você vai encontrar um exemplo bem interessante de upload.

Blz, dessa maneira q ficou o meu struts.xml seria uma siolução para o primeiro problema?

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
&lt;!DOCTYPE struts PUBLIC
    &quot;-//Apache Software Foundation//DTD Struts Configuration 2.0//EN&quot;
    &quot;http&#58;//struts.apache.org/dtds/struts-2.0.dtd&quot;&gt;

&lt;struts&gt;

	&lt;include file=&quot;struts-default.xml&quot; /&gt;

	&lt;constant name=&quot;struts.enable.DynamicMethodInvocation&quot; value=&quot;true&quot; /&gt;
	&lt;constant name=&quot;struts.devMode&quot; value=&quot;false&quot; /&gt;

	&lt;package name=&quot;default&quot; extends=&quot;struts-default&quot; namespace=&quot;/fileupload&quot;&gt;
		&lt;action name=&quot;salvarUpload&quot; class=&quot;br.inf.bluestar.SalvarArquivo&quot; method=&quot;execute&quot;&gt;
		 	&lt;interceptor-ref name=&quot;fileUpload&quot;&gt;&lt;/interceptor-ref&gt;
			&lt;result name=&quot;ok&quot;&gt;/index.jsp&lt;/result&gt;
		&lt;/action&gt;

	&lt;/package&gt;

&lt;/struts&gt;

E mais estranho é q na minha action tenho o sequinte codigo. Declarando um objeto do tipo q no erro acima diz q não achou, e não da erro de compilação? Ou será q entendi errado?

private File upload;//The actual file
	private String uploadContentType; //The content type of the file
	private String uploadFileName; //The uploaded file name
	private String fileCaption;//The caption of the file entered by user
	public String execute&#40;&#41; throws Exception &#123;
		org.apache.struts2.dispatcher.multipart.MultiPartRequest mt;

		return &quot;ok&quot;;
	&#125;

Kra ficou faltando a action tae dei uma lida por ai e nada de resolver meu problema. Pelo amor de Deus me ajuda. Não tem nem um exemplo pra download em algum lugar eu já preucurei e não achei.

package br.inf.bluestar;
import java.util.Date;
import java.io.File;

import br.inf.bluestar.model.Arquivo;
import br.inf.bluestar.model.ArquivoHome;

import com.opensymphony.xwork2.ActionSupport;
public class SalvarArquivo extends ActionSupport &#123;


	private File upload;//The actual file
	private String uploadContentType; //The content type of the file
	private String uploadFileName; //The uploaded file name
	private String fileCaption;//The caption of the file entered by user
	public String execute&#40;&#41; throws Exception &#123;
		org.apache.struts2.dispatcher.multipart.MultiPartRequest mt;

		return &quot;ok&quot;;
	&#125;
	public String getFileCaption&#40;&#41; &#123;
		return fileCaption;
	&#125;
	public void setFileCaption&#40;String fileCaption&#41; &#123;
		this.fileCaption = fileCaption;
	&#125;
	public File getUpload&#40;&#41; &#123;
		return upload;
	&#125;
	public void setUpload&#40;File upload&#41; &#123;
		this.upload = upload;
	&#125;
	public String getUploadContentType&#40;&#41; &#123;
		return uploadContentType;
	&#125;
	public void setUploadContentType&#40;String uploadContentType&#41; &#123;
		this.uploadContentType = uploadContentType;
	&#125;
	public String getUploadFileName&#40;&#41; &#123;
		return uploadFileName;
	&#125;
	public void setUploadFileName&#40;String uploadFileName&#41; &#123;
		this.uploadFileName = uploadFileName;
	&#125;


&#125;

Esqueleto

Problema resolvido então aqueles q tem problemas com upload com struts podem postar as dúvidas, até pedir um exemplo funfante.

Esqueleto

Amigo estou com o mesmo problema que você teve para fazer upload no struts 2, tem como vc postar como resolveu ou enviar um exemplo pra mim no meu email? email: contato arroba paulojunior ponto com

obrigado.

kra te mando sim, mas vai ter de esperar eu chegar em ksa e vai demorar.

Esqueleto

Se vocês tiverem problema com upload no struts2 posso fazer um tutorial pra ajudar o pessoal.

Guilherme,

seria uma boa… muitos tem duvida de como fazer upload em struts 2.

[quote=paulo.junior]Guilherme,

seria uma boa… muitos tem duvida de como fazer upload em struts 2. [/quote]

Ok, assim que eu tiver um tempo vou pegar um exemplo que tenho e vou dar uma melhorada nele.

Ola pessoal,

consegui fazer o upload, só que estou com problema para mover o arquivo da pasta termporaria do tomcat para o pasta de imagens do meu site.

Fiz da seguinte forma

Importei os jar’s: commons-fileupload-1.1.1.jar e commons-io-1.1.jar

depois criei um formulario de envio simples:


<s:form action="doUpload!salvar" method="POST" enctype="multipart/form-data">
        <s:file name="foto" label="Foto"/>        
        <s:submit />
    </s:form>

Depois na action fiz da seguinte forma:


public class ConteudoAction extends ActionSupport implements ServicesAction {
   
    private File foto;
    private String fileName;
    private String ContentType;

    public ConteudoAction() {
        
        
    }

    public void getUpload() {

        try {

            String fullFileName = ServletActionContext.getServletContext().
                    getRealPath("/uploads/"+ getFotoFileName() );
            
            File theFile = new File(fullFileName);
            
            FileUtils.copyFile(foto, theFile);
            
        } catch (Exception e) {
            
            addActionError(e.getMessage());            
            
        }

    }

    public String salvar() {
        getUpload();         
        return SUCCESS;
        
    }    

    public File getFoto() {
        return foto;
    }
    
    public String getFotoFileName() {
        return fileName;
    }

    public String getFotoContentType() {
        return ContentType;
    }        

    public void setFoto(File foto) {
        this.foto = foto;
    }

    public void setFotoFileName(String fileName) {
        this.fileName = fileName;
    }

    public void setFotoContentType(String ContentType) {
        this.ContentType = ContentType;
    }

    
}

O problema esta no método getUpload(); que não esta movendo a foto. Ja tentei mudar as permissões na pasta do windows mas não funcionou. Alguem ja passou por isso? ou tem um exemplo de como mover a foto?

Dá uma olhada nesse post que eu publiquei há um tempo atrás sobre upload com o Webwork. Funciona da mesma forma no Struts2.

http://blognotfoundexception.blogspot.com/2006/10/upload-com-webwork.html

Guilherme,

Funcionou perfeitamente depois de alguns ajustes nos struts-default.properties. Fiz igual ao seu tutorial.

A todos que tiverem o mesmo problema, é so seguir o tutorial de Guilherme substituindo o webwork.properties por struts-default.properties.

valew.