Upload de multiplos arquivos em jsp ou servlet

Estou com uma dúvida: se é possível fazer um upload de 1, 2 ou mais arquivos de uma vez usando jsp ou servlet.

O upload de um arquivo por vez, consegui realizar.

e possivel sim!

coloque assim na servlet

FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);

abrax

mauricio adl, como que eu faço para selecionar os diversos arquivos? aí é um problema… já no primeiro jsp

index.jsp

<html>  
<head> 

</head>

<body>
    <h1>Exemplo Upload com Servlet (upload.java)</h1>  
<% String id = "1"; %>        
    <form action="servlet/upload" method="post" ENCTYPE="multipart/form-data">  
        <input type="hidden" name="id" value="<%=id%>">  
    <input type="file" name="file" id="file" size=100>  
    <input type="submit" value="Enviar">  
    </form> 

</body>	
	</html>

upload.class

import java.io.*;  
import java.util.*;  
import javax.servlet.*;  
import javax.servlet.http.*;  
  
public class upload extends HttpServlet {  
  
    private static List parseRequest(HttpServletRequest request) {  
        throw new UnsupportedOperationException("Not yet implemented");  
    }  
     
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)  
    throws ServletException, IOException {  
        response.setContentType("text/html;charset=UTF-8");  
        PrintWriter out = response.getWriter();  
        try {  
              
          String codigo = request.getParameter("id");    
              
          String nomeParametro = "file";  
          String id = request.getParameter(nomeParametro);  
  
            //out.println("O código da páigna é: "+codigo); // imprime id nula  
        
     File dir = new File(getServletContext().getRealPath("/")+ "eventos");     
     
     String contentType = request.getContentType();    
    
     if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) {    
     
              DataInputStream in = new DataInputStream(request.getInputStream());    
     
                 int formDataLength = request.getContentLength();    
                 byte dataBytes[] = new byte[formDataLength];    
                 int byteRead = 0;    
                 int totalBytesRead = 0;    
     
               while (totalBytesRead < formDataLength) {    
     
                   byteRead = in.read(dataBytes, totalBytesRead, formDataLength);    
                      totalBytesRead += byteRead;    
                 }    
     
               String file = new String(dataBytes);    
               String saveFile = file.substring(file.indexOf("filename=\"") + 10);    
                 saveFile = saveFile.substring(0, saveFile.indexOf("\n"));    
                 saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\""));    
     
                 int lastIndex = contentType.lastIndexOf("=");    
                 String boundary = contentType.substring(lastIndex + 1,contentType.length());    
     
                 int pos;    
     
              pos = file.indexOf("filename=\"");    
              pos = file.indexOf("\n", pos) + 1;    
              pos = file.indexOf("\n", pos) + 1;    
              pos = file.indexOf("\n", pos) + 1;    
     
                int boundaryLocation = file.indexOf(boundary, pos) - 4;    
                int startPos = ((file.substring(0, pos)).getBytes()).length;    
                int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;    
     
              String filepath = dir+ "/" +saveFile;    
                   
              FileOutputStream fileOut = new FileOutputStream(filepath);    
                 fileOut.write(dataBytes, startPos, (endPos - startPos));    
                 fileOut.flush();    
                 fileOut.close();   
                 
                 out.println("Arquivo transferido com sucesso!"); // imprime id nula 
     
   
          }      
        } finally {   
            out.close();  
        }  
    }   
  
    // <editor-fold defaultstate="collapsed" desc="Métodos HttpServlet. Clique no sinal de + à esquerda para editar o código.">  
    /**  
    * Handles the HTTP <code>GET</code> method. 
    * @param request servlet request 
    * @param response servlet response 
    */  
    @Override  
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  
    throws ServletException, IOException {  
        processRequest(request, response);  
    }   
  
    /**  
    * Handles the HTTP <code>POST</code> method. 
    * @param request servlet request 
    * @param response servlet response 
    */  
    @Override  
    protected void doPost(HttpServletRequest request, HttpServletResponse response)  
    throws ServletException, IOException {  
        processRequest(request, response);  
    }  
  
    /**  
    * Returns a short description of the servlet. 
    */  
    @Override  
    public String getServletInfo() {  
        return "Short description";  
    }  
    // </editor-fold>  
} 

tem q colocar o multiple

&lt;input type="file" multiple /&gt;

coloquei da seguinte maneira:

<input type="file" name="arquivo[]"  size="150" tabindex="15" accesskey="2" multiple accept="xml/*">

No firefox e google chrome seleciona mais de 1 arquivo, mas no IE não dá certo!!!

isso tem solução?

se nao me engano file multiple eh do html5 e o lixo do IE nao tem suporte.

morte ao IE

[]'s

valeu maurcioadl pela ajuda, somente no IE não funcionou a seleção multipla de arquivos…

Alguém tem 1 dica ou solução para este poblema?

[quote=Paezani]valeu maurcioadl pela ajuda, somente no IE não funcionou a seleção multipla de arquivos…

Alguém tem 1 dica ou solução para este poblema?[/quote]

Cara, como eu disse, o IE não tem suporte a isso, uma solução “elegante” eh fazer como o facebook faz, acessa o upload de fotos dele pelo IE que vc vai ver.

[]'s