Erro Upload de Arquivo

Amigons,

Tô usando um código pronto da revista Java Magazine que faz o upload de arquivo, já criei a página que solicitará o servlet com o campo file “tudo direitinho” e na chamada deste ocorre o seguinte erro:

Erro gerado pelo servlet uploadArquivoServlet

[code]javax.servlet.ServletException: Error instantiating servlet class net.itambe.uploadArquivoServlet
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
java.lang.Thread.run(Thread.java:534)

java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException
java.lang.Class.getDeclaredConstructors0(Native Method)
java.lang.Class.privateGetDeclaredConstructors(Class.java:1618)
java.lang.Class.getConstructor0(Class.java:1930)
java.lang.Class.newInstance0(Class.java:278)
java.lang.Class.newInstance(Class.java:261)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
java.lang.Thread.run(Thread.java:534)
[/code]

Página que chama o servlet

<!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <title>Upload de Arquivo</title> </head> <body bgcolor="#FFFFFF"> <h1>Upload de Arquivo</h1> <form action="/pc/uploadArquivoServlet" method="post" enctype="multipart/form-data"> Seu nome: <input type="text" name="nome"><br> Localização do Arquivo: <input type="file" name="arquivo"><br><br> <input type="submit" name="submit" value="Enviar"> </form> </body> </html>

Fonte do Servlet

[code]package net.itambe;

import java.io.;
import java.util.
;
import javax.servlet.;
import javax.servlet.http.
;
import org.apache.commons.fileupload.*;

public class uploadArquivoServlet extends HttpServlet{

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
	PrintWriter out = response.getWriter();
	if(FileUpload.isMultipartContent(request)){
		String usuario = null;
		DiskFileUpload upload = new DiskFileUpload();
		
		Iterator iterator = null;
		
		try{
			iterator = upload.parseRequest(request).iterator();
		}catch(FileUploadException exc){
			exc.printStackTrace();
			out.println("Erro processamento submissão: " + exc.getMessage());
			return;
		}
		while(iterator.hasNext()){
			FileItem item = (FileItem) iterator.next();
			boolean isFormField = item.isFormField();
			if(isFormField){
				if(item.getFieldName().equalsIgnoreCase("nome")){
					usuario = item.getString() == null ? "" : " " + item.getString();
				}
			}else{
				String nomeArquivo = item.getName();
				String path = getServletContext().getRealPath("/") + "WEB-INF/files/" + nomeArquivo;
				try{
					File file = new File(path);
					item.write(file);
					out.println("Obrigado" + usuario + " pela submissão.<br>");
					out.println("O arquivo foi gravado em " + path + ".");
				}catch(Exception exc){
					out.println("Erro gravando arquivo: " + exc.getMessage());
				}
			}
		}
	}else{
		out.println("Erro: página não pode ser acessada diretamente!");
	}
}

}
[/code]

Alguém sabe o que tá acontecendo ?

Valeuh!

o pacote commons-fileupload.jar não está no classpath da tua aplicação web, pra funcionar basta colocar este pacote dentro de WEB-INF/lib

eles está no WEB-INF/lib da minha aplicação e no server/lib

???

verifique a versão do seu commons-fileupload.jar, verifique se dentro dele tem a classe FileUploadException

de qualquer modo, o erro irá desaparecer se vc trocar

         }catch(FileUploadException exc){[/code]por[code]         }catch(Exception exc){

[quote=“viecili”]verifique a versão do seu commons-fileupload.jar, verifique se dentro dele tem a classe FileUploadException

de qualquer modo, o erro irá desaparecer se vc trocar

         }catch(FileUploadException exc){[/code]por[code]         }catch(Exception exc){

A versão que estou utilizando é a 1.0 e existe a classe FileUploadException, quando modifiquei para a Exception genérica ele me apontou outro erro …

java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUpload net.itambe.uploadArquivoServlet.doPost(uploadArquivoServlet.java:21) javax.servlet.http.HttpServlet.service(HttpServlet.java:709) javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

ou seja, não está conseguindo encontrar o pacote de classe do FileUpload … mas como citado anteriormente, eu coloquei tanto no lib do server quanto no da aplicação !!!

… preciso colocar alguma coisa no CLASSPATH ?

vc está usando o Tomcat, certo?

se realmente o pacote estiver em commons/lib, shared/lib ou dentro do teu WEB-INF/lib este erro é algo incompreensível pra mim, sugiro que faça o redeploy da tua aplicação e verfique novamente se o commons-fileupload.jar está no lugar certo!

fala galera,
realmente o erro é estranho, mais seguinte é bom vc conferir várias coisas… tipo vc já chamou outros servlet’s na sua aplicação? nesse trecho do código da chamada do servlet:

<form action="/pc/uploadArquivoServlet" method="post" enctype="multipart/form-data">

dá para perceber que esse Servlet tem que esta mapeado no WEB.XML, isso esta ocorrendo? qual a versão do tomcat? bom… se isso não estiver configurado seu servlet não vai funcionar, e vai ficar gerando alguns erros!!! faça um teste, crie uma pacote è aparte usando o pacote commons-fileupload.jar, e veja se funciona, teste o servlet imprimindo uma msg na tela (só para ver se esta funcionando mesmo…) depois jogue o código do upload no servlet…

depois continue a testar… valeu!!!

já desconbri qual é o problema … é que estou colocando o pacote do FileUpload descompactado no lib quando deveria ter colocado no dirétório classes … agora tá rolando !!!

Valeuh galera !!!

:tapas: :grr:

eu devia ter sublinhado pacote ehehehhee

boa…