Upload com Struts

15 respostas
E

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

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.

Seque minha jsp

<%@ 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>

15 Respostas

G

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.

E

Seque o arquivo struts.xml valeu, pela ajuda.

<?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>

	<include file="struts-default.xml" />

	<constant name="struts.enable.DynamicMethodInvocation" value="true" />
	<constant name="struts.devMode" value="false" />

	<package name="default" extends="struts-default" namespace="/fileupload">

		<action name="salvarUpload" class="br.inf.bluestar.SalvarArquivo" method="execute">
			<result name="ok">/index.jsp</result>
		</action>

	</package>

</struts>
G

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.

E

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

<?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>

	<include file="struts-default.xml" />

	<constant name="struts.enable.DynamicMethodInvocation" value="true" />
	<constant name="struts.devMode" value="false" />

	<package name="default" extends="struts-default" namespace="/fileupload">
		<action name="salvarUpload" class="br.inf.bluestar.SalvarArquivo" method="execute">
		 	<interceptor-ref name="fileUpload"></interceptor-ref>
			<result name="ok">/index.jsp</result>
		</action>

	</package>

</struts>
E

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() throws Exception {
		org.apache.struts2.dispatcher.multipart.MultiPartRequest mt;

		return "ok";
	}
E

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 {


	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() throws Exception {
		org.apache.struts2.dispatcher.multipart.MultiPartRequest mt;

		return "ok";
	}
	public String getFileCaption() {
		return fileCaption;
	}
	public void setFileCaption(String fileCaption) {
		this.fileCaption = fileCaption;
	}
	public File getUpload() {
		return upload;
	}
	public void setUpload(File upload) {
		this.upload = upload;
	}
	public String getUploadContentType() {
		return uploadContentType;
	}
	public void setUploadContentType(String uploadContentType) {
		this.uploadContentType = uploadContentType;
	}
	public String getUploadFileName() {
		return uploadFileName;
	}
	public void setUploadFileName(String uploadFileName) {
		this.uploadFileName = uploadFileName;
	}


}

Esqueleto

E

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

Esqueleto

P

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.

E

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

Esqueleto

G

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

P

Guilherme,

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

G

paulo.junior:
Guilherme,

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

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

P

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?

G

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

P

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.

Criado 2 de janeiro de 2008
Ultima resposta 27 de mar. de 2008
Respostas 15
Participantes 3