olá, eu estou tendo problemas em como realizar o upload de arquivos utilizando o fileupload
eu criei uma página bem simples apenas para selecionar o arquivo e submeter:
<html>
<head>
<title>JSP Page</title>
</head>
<body>
<form method="post" action="MeuServlet" enctype="multipart/form-data">
<input type="file" name="file1"/><br/>
<input type="file" name="file2"/><br/>
<input type="file" name="file3"/><br/>
<input type="submit" value="Enviar dados" />
</form>
</body>
</html>
e daew no MeuServlet, eu apliquei este padrão segundo o JDoc descrito por lá
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
System.out.println("É mult Parte !!!!");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet AIO</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet AIO at " + request.getContextPath() + "</h1>");
out.println("É mult Parte !!!!</br>");
// Create a factory for disk-based file items
ServletFileUpload upload = new ServletFileUpload();
// Parse the request
FileItemIterator iter = null;
try {
iter = upload.getItemIterator(request);
} catch (FileUploadException ex) {
Logger.getLogger(AIO.class.getName()).log(Level.SEVERE, null, ex);
}
try {
while (iter.hasNext()) {
FileItemStream item = iter.next();
String name = item.getFieldName();
InputStream stream = item.openStream();
if (item.isFormField()) {
System.out.println("Form field " + name + " with value " + Streams.asString(stream) + " detected.");
out.println("Form field " + name + " with value " + Streams.asString(stream) + " detected.<br/>");
} else {
System.out.println("File field " + name + " with file name " + item.getName() + " detected.");
out.println("File field " + name + " with file name " + item.getName() + " detected, formato: "+item.getContentType()+".<br/>");
FileItem item2 = (FileItem)item;
File uploadFile = new File("C:\\temp\\"+name);
try {
item2.write(uploadFile);
} catch (Exception ex) {
Logger.getLogger(AIO.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
} catch (FileUploadException ex) {
Logger.getLogger(AIO.class.getName()).log(Level.SEVERE, null, ex);
}
out.println("</body>");
out.println("</html>");
}
} finally {
out.close();
}
}
dando o erro:
java.lang.ClassCastException: org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl$FileItemStreamImpl cannot be cast to org.apache.commons.fileupload.FileItem
at Servlet.AIO.processRequest(AIO.java:83)
at Servlet.AIO.doPost(AIO.java:155)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:431)
at org.apache.catalina.core.StandardWrapperValve.preInvoke(StandardWrapperValve.java:462)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:139)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:186)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:719)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:657)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:96)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:187)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:719)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:657)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:651)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1030)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:142)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:719)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:657)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:651)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1030)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:242)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:180)
at com.sun.grizzly.http.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:633)
at com.sun.grizzly.http.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:570)
at com.sun.grizzly.http.DefaultProcessorTask.process(DefaultProcessorTask.java:827)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:152)
at com.sun.enterprise.v3.services.impl.GlassfishProtocolChain.executeProtocolFilter(GlassfishProtocolChain.java:71)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:103)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:89)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:67)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:56)
at com.sun.grizzly.util.WorkerThreadImpl.processTask(WorkerThreadImpl.java:325)
at com.sun.grizzly.util.WorkerThreadImpl.run(WorkerThreadImpl.java:184)
mas pelo que eu vi, a ferramenta conseguia converter FileItemStream para FileItem para depois eu poder realizar o upload, mas isso no caso não está acontecendo no código pelo que percebi