FileUpload!

2 respostas
J

Dae galera.. eu estou utilizando o FileUpload da jakarta.. só que tem uma particularidade...eu fiz algo parecido com o anexar arquivos do gmail, então eu não tenho um campo do tipo file e sim uma lista de vários arquivos que eu quero enviar ao mesmo tempo para o servidor...
com isso eu não consigo usar o List files = upload.parseRequest( request ); e FileItem fileItem = ( FileItem ) files.get( i ); para pegar os arquivos... eu tenho eles em um ArrayList.. alguem tem alguma ideia de como fazer isso? Teria alguma forma de eu converter ou algum método que eu converta cada item da minha lista para um FileItem ou algo do genero..? Abraços!

Segue o esboço da minha classe..

public void salvaArquivo( HttpServletRequest request, HttpServletResponse response, String path )
    throws ServletException,IOException {
        
         //  boolean ehMultipart = FileUpload.isMultipartContent( request );        
        // Verifica se formulário é multipart
        //if ( ehMultipart ) {
            // A servlet.. serve pra fazer upload usando servlet.
            // Esse Disk... diz como os arquivos serão tratados( armazenados )
            ServletFileUpload upload = new ServletFileUpload( new DiskFileItemFactory());

            String caminhoCompleto = request.getParameter("caminhoArquivoCompleto");
            String caminhoToken = "";
            List files = new ArrayList();
            while( caminhoCompleto.indexOf("[:]") != -1 ) {
                caminhoToken = caminhoCompleto.substring(0, caminhoCompleto.indexOf("[:]"));
                files.add(caminhoToken);
                caminhoCompleto = caminhoCompleto.substring(caminhoCompleto.indexOf("[:]")+3);

            }           
            // Como é uma lista, usa-se um for para manipular a lista
            for ( int i = 0; i < files.size(); i++ ) {
                ALDebug.print("--- Entrou "+files.size());
                
                // Pegando cada objeto em separado( item )
                //FileItem fileItem = ( FileItem ) files.get( i );

                //ALDebug.print("FileItem> "+fileItem.getFieldName());
                // Para o servidor vai( dependendo da quantidade de arquivos ) um conjunto de arquivos( formulários e arquivos ),
                //Então tem que verificar se é um arquivo ou dados do formulário.
                // Se esse item tiver um nome, ele é um arquivo, se não, é um formulário
                String nomeArquivo = ( String ) files.get(i);

                try {
                    // gravando com nome original, verifica a posição da última barra pra pegar o nome do arquivo
                    // O + 1 é pra começar a pegar do nome do arquivo e não a barra
                    if ( nomeArquivo.lastIndexOf( "\\" ) != -1 ) {
                        nomeArquivo = nomeArquivo.substring( nomeArquivo.lastIndexOf( "\\" ) + 1 );
                    }
                //    fileItem.write( new File( "C:\\Temp\\" + nomeArquivo ));
                    try {
                        File file = new File("C:\\Temp\\" + nomeArquivo);

                        // Create file if it does not exist
                        boolean success = file.createNewFile();
                        if (success) {
                            // File did not exist and was created
                        } else {
                            // File already exists
                        }
                    } catch (IOException e) {
                    }

                } catch( Exception e ) {
                    throw new ServletException(e.getMessage() + " :: Erro: Página não pode ser acessada diretamente!" );      
                }
            } 
        //}
    }

2 Respostas

J

Olha só galera.. agora eu estou tentando fazer com IO mesmo.. dae consegui de certa forma, certa forma porque na minha máquina eu consigo fazer o upload mas de outra máquina não.. ele diz que o sistema não pode encontrar o caminho especificado!
Segue o código:

public void salvaArquivo( HttpServletRequest request, HttpServletResponse response, String path )
    throws ServletException,IOException {
        
        // Guarda a definição se é multipart ou não,isso vindo da requisição
      //  boolean ehMultipart = FileUpload.isMultipartContent( request );        
        // Verifica se formulário é multipart
        //if ( ehMultipart ) {
            // A servlet.. serve pra fazer upload usando servlet.
            // Esse Disk... diz como os arquivos serão tratados( armazenados )
            ServletFileUpload upload = new ServletFileUpload( new DiskFileItemFactory());

            String caminhoCompleto = request.getParameter("caminhoArquivoCompleto");
            String caminhoToken = "";
            List files = new ArrayList();
            while( caminhoCompleto.indexOf("[:]") != -1 ) {
                caminhoToken = caminhoCompleto.substring(0, caminhoCompleto.indexOf("[:]"));
                files.add(caminhoToken);
                caminhoCompleto = caminhoCompleto.substring(caminhoCompleto.indexOf("[:]")+3);
                ALDebug.print("--- "+caminhoToken);
            } 
            
            // Como é uma lista, usa-se um for para manipular a lista
            for ( int i = 0; i < files.size(); i++ ) {
                ALDebug.print("--- Entrou "+files.size());
                
                // Para o servidor vai( dependendo da quantidade de arquivos ) um conjunto de arquivos( formulários e arquivos ),
                //Então tem que verificar se é um arquivo ou dados do formulário.
                // Se esse item tiver um nome, ele é um arquivo, se não, é um formulário
                String nomeArquivo = ( String ) files.get(i);

                try {
                    // gravando com nome original, verifica a posição da última barra pra pegar o nome do arquivo
                    // O + 1 é pra começar a pegar do nome do arquivo e não a barra
                    if ( nomeArquivo.lastIndexOf( "\\" ) != -1 ) {
                        nomeArquivo = nomeArquivo.substring( nomeArquivo.lastIndexOf( "\\" ) + 1 );
                    }              
                    // Cria o diretório caso ele não exista
                    File diretorio = new File("C:\\Temp\\");
                    
                    if (!diretorio.exists()){
                        ALDebug.print("");
                        //diretorio.mkdir();
                    }

                    File file = new File(diretorio, nomeArquivo);
                    FileOutputStream output = new FileOutputStream(file);
                    FileInputStream is = new FileInputStream(( String )files.get(i));

                    byte[] buffer = new byte[is.available()];
                    int nLidos;

                    while ((nLidos = is.read(buffer)) >= 0) {
                        output.write(buffer, 0, nLidos);
                    }

                    output.flush();                   
                    output.close();

              
                } catch( Exception e ) {
                    throw new ServletException(e.getMessage() + " :: Erro: Página não pode ser acessada diretamente!" );      
                }
            }

Ah.. e tem outra coisa que ocorreu quando tentei fazer o upload do arquivo de outra máquina na rede.. os ícones do dos programas que estão no desktop ele copia para a minha máquina!!

J

Bah galera… ninguém?? Já vasculhei a net e não achei nada que me ajudasse!!
Abraço!!

Criado 3 de setembro de 2007
Ultima resposta 5 de set. de 2007
Respostas 2
Participantes 1