Salve pessoal, eu tô há quase 3 semanas tentando fazer um upload simples de um arquivo(imagem jpeg) de 30kb usando o jakarta commons fileupload. Estou usando o Netbeans 6.0.1.
No início quando eu tentava importar o commons fileupload a linha ficava com aquele sublinhado vermelho dizendo que não achou as classes.
Daí eu fui em; Ferramentas > Bibliotecas, na janela eu clico em “Nova Biblioteca”, dou um nome qualquer pra nova biblioteca, seleciono “Blbliotecas de Classe” e dou OK.
No “classpath” eu coloco o caminho do arquivo “commons-fileupload-1.2.1.jar”
No Códigos-Fonte(sources) eu ponho o caminho do arquivo “commons-fileupload-1.2.1-sources.jar”
Clico em OK.
No meu projeto eu clico com o direito em “Bibliotecas” > “Adicionar Biblioteca”, vai se abrir uma lista com todas as bibliotecas e a minha nova biblioteca está lá entre elas, adiciono ela. À partir daí eu já consigo importar as classes e acabam-se os erros no netbeans.
Aí vou executar o projeto e me é mostrada essa exceção;
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:541)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
root cause
javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
org.apache.jsp.teste_jsp._jspService(teste_jsp.java:87)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
root cause
java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:196)
org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:358)
org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
classes.geral.executaUpload(geral.java:306)
org.apache.jsp.teste_jsp._jspService(teste_jsp.java:60)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.
Apache Tomcat/6.0.14
Aí eu ponho esses dois .jar na pasta /web//WEB-INF/lib/ (no mesmo lugar onde tá o meu jar de conexão com o oracle que funciona), e me continua sendo mostrada essa exceção.
Por enquanto eu nem tentei fazer o upload porque quando chega na linha
List items = upload.parseRequest(request);
já dá erro.
Eu criei o seguinte método só pra testar e me retornar o nome do arquivo que foi postado pelo formulário;
public static String executaUpload(HttpServletRequest request) throws ServletException, IOException {
String res = "";
if (FileUpload.isMultipartContent(request)) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
String local = new String("/home/leogazio");
upload.setSizeMax(2 * 1024 * 1024);
try {
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem fitem = (FileItem) iter.next();
res += fitem.getName();
}
} catch(FileUploadException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
return res;
}
Se eu comentar o scopo do try não me é retornada nenhuma exceção;
Agora vem a parte que eu acho engraçada;
Essa parte do códico usa o commons fileupload e além de NÃO me dá exceção funciona porque se eu tirar o parâmetro enctype da tag do form html a seguinte condição retorna false e se eu colocar o enctype como multipart/form-data ela retorna true;
if (FileUpload.isMultipartContent(request)) {
res = "É Multipart";
} else {
res = "NÃO é Multipart";
}
A pergunta agora é: Por que essa condição que usa o commons fileupload funciona e o List não? Se alguém souber como proceder pra fazer isso funcionar, desde os import lá em cima até o final… Já li vários tutoriais e nenhum funcionou, aqui no GUJ eu já li todos e nada, a exceção continua quando chega no List…
Um abraço à todos os colegas aqui e qualquer ajuda será bemvinda, []'s.