Erro Upload de Arquivo

9 respostas
R

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
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)
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
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!");
		}
	}
}

Alguém sabe o que tá acontecendo ?

Valeuh!

9 Respostas

V

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

R

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

???

V

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){
por
}catch(Exception exc){
R
"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){
por
}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 ?

V

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!

P

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

R

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

V

:tapas: :grr:

eu devia ter sublinhado pacote ehehehhee

P

boa…

Criado 24 de fevereiro de 2005
Ultima resposta 28 de fev. de 2005
Respostas 9
Participantes 3