Como realizar um upload utilizando uma servlet?

8 respostas
Valter_Henrique

Olá GUJl,
eu estou utilizando AJAX no meu site, porém no momento de escolher uma imagem e realizar o upload ele esta voltando para a minha página normalmente e não esta lançando nenhuma exceção porém não realiza o upload também.
O que eu poderia fazer ?

AjaxCadastro.jsp

<form action="#" class="formEvento" id="formUpload"  ENCTYPE="multipart/form-data">
    <div id="caixabotao">
    <p>Forneça uma imagem para o seu evento ( &lt; 500kb) </p>
    &lt;input type="file" name="arquivo" id="arquivo"&gt;
    &lt;input class="button" type="button" value="Enviar" onclick="chamarServletUpload('Uploader', 'conteudoAjax', 'Realizando upload...')"&gt;
  &lt;/div&gt;
&lt;/form&gt;

No meu javascript:

function realizarUpload(url,div, msg){

    if (document.getElementById(div) != null) {
        document.getElementById(div).innerHTML = "&lt;div class=\"carregando\"&gt;<img  ><p>" + msg + "</p>&lt;/div&gt;";
    }

    HttpMethod = "POST";
    var req = null;
    req = getXMLHTTPRequest();

    if (req){
        req.open(HttpMethod, url, false);
        req.setRequestHeader('Content-type', 'multipart/form-data; boundary=AaB03x');
        req.send(null);
        document.getElementById(div).innerHTML = req.responseText;
    }
}

Minha servlet, Uploader.java

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("DENTRO DO POST UPLOADER");
        PrintWriter out = response.getWriter();

        DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
        //definindo o tamanho do arquivo
        fileItemFactory.setSizeThreshold(1 * 1024 * 1024); //1 MB
        //definindo o tamanho do arquivo
        fileItemFactory.setRepository(tmpDir);

        ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);

        try {
            // convertendo o request
            List items = uploadHandler.parseRequest(request);
            Iterator itr = items.iterator();
            System.out.println("QUANTIDADE DE ITEMS:" + items.size());
            while (itr.hasNext()) {
                System.out.println("AQUIIIIIIIIIIIIIIIIIIIIIIII 1");

                FileItem item = (FileItem) itr.next();
                //pegando o nome do arquivo que foi feito o upload
                String arquivo = item.getName();
                request.getSession().setAttribute("imagem", arquivo);

                if (item.getSize() &lt;= (1 * 1024 * 512)) {
                    System.out.println("AQUIIIIIIIIIIIIIIIIIIIIIIII 2");

                    if (!item.getName().equals("")) {
                        System.out.println("AQUIIIIIIIIIIIIIIIIIIIIIIII 3");

                        if (item.getContentType().contains("jpeg") || item.getContentType().contains("jpg") || item.getContentType().contains("png") || item.getContentType().contains("bmp")) {
                            // Write file to the ultimate location.
                            System.out.println("AQUIIIIIIIIIIIIIIIIIIIIIIII 4");

                            File file = new File(destinationDir, item.getName());
                            item.write(file);

                            request.getSession().setAttribute("type", "cxdialogo_sucesso");
                            request.getSession().setAttribute("message", "<p>- Upload realizado com &lt;strong&gt;sucesso !&lt;/strong&gt; </p><p>- Clique na caixa para fechar.</p>");

                        } else {
                            System.out.println("AQUIIIIIIIIIIIIIIIIIIIIIIII 5");

                            request.getSession().setAttribute("type", "cxdialogo_erro");
                            request.getSession().setAttribute("message", "<p>- &lt;strong&gt;Apenas&lt;/strong&gt; imagens serão aceitas (.jpeg, .jpg, .png ou .bmp) .</p><p>- Clique na caixa para fechar.</p>");
                        }
                    } else {
                        System.out.println("AQUIIIIIIIIIIIIIIIIIIIIIIII 6");

                        request.getSession().setAttribute("type", "cxdialogo_erro");
                        request.getSession().setAttribute("message", "<p>- &lt;strong&gt;Forneça &lt;/strong&gt; uma imagem para cadastrar o seu evento</p><p>- Clique na caixa para fechar.</p>");
                    }
                } else {
                    System.out.println("AQUIIIIIIIIIIIIIIIIIIIIIIII 7");

                    request.getSession().setAttribute("type", "cxdialogo_erro");
                    request.getSession().setAttribute("message", "<p>-Arquivos &lt;strong&gt;maiores que 1 MB &lt;/strong&gt; não serão aceitos.</p><p>- Clique na caixa para fechar.</p>");
                }
            }

            System.out.println("ANTES DO FOWARD");
            RequestDispatcher rd = null;
             rd = request.getRequestDispatcher("/AjaxCadastrarEvento.jsp");
            rd.forward(request, response);

        } catch (FileUploadException ex) {
            System.out.println("AQUIIIIIIIIIIIIIIIIIIIIIIII 8");
            System.out.println(ex.getMessage());
            request.getSession().setAttribute("type", "cxdialogo_erro");
            request.getSession().setAttribute("message", "<p>- Ocorreu um &lt;strong&gt;erro &lt;/strong&gt; com o seu upload, tente novamente. </p><p>- Clique na caixa para fechar.</p>");
        } catch (Exception ex) {
            System.out.println("AQUIIIIIIIIIIIIIIIIIIIIIIII 9");

            request.getSession().setAttribute("type", "cxdialogo_erro");
            request.getSession().setAttribute("message", "<p>- Ocorreu um &lt;strong&gt;erro &lt;/strong&gt; com o seu upload, tente novamente. </p><p>- Clique na caixa para fechar.</p>");
        } finally {
            out.close();
        }

A saída que tenho é :

INFO: DENTRO DO POST UPLOADER
INFO: QUANTIDADE DE ITEMS:0
INFO: ANTES DO FOWARD

Toda ajuda será bem-vinda, valeu GUJ.

8 Respostas

R

Olá.
Conhece o Commons File Upload?Acho que facilita tua vida…

rael_gc

Ajax não faz envio de arquivo. Ou você faz um post normal, ou tenta acochambrar com iframe.

L

Exatamente.

Envio de arquivos via Ajax não é possível. Você consegue simular o ajax utilizando um IFrame.

Uma vez tive que fazer um visualizador instantâneo da foto enviada, e tive que usar o IFrame.

Valter_Henrique

raf4ever:
Olá.
Conhece o Commons File Upload?Acho que facilita tua vida…

Oi meu velho, não conheço não cara, poderia me sugerir um site ou um código-exemplo ?

Abraços.

Valter_Henrique

Não conheço iFrame não.
Recomenda algum lugar para estudar sobre ?

Valeu cara.

Valter_Henrique

Exatamente.

Envio de arquivos via Ajax não é possível. Você consegue simular o ajax utilizando um IFrame.

Uma vez tive que fazer um visualizador instantâneo da foto enviada, e tive que usar o IFrame.

Entendi cara, bem vou procurar sobre esse iframe,rs.
Obrigado.

M

iframe não é nada mais do que uma tag HTML que permite que vc inclua uma página dentro da outra: http://www.w3schools.com/TAGS/tag_iframe.asp

Abraço! :slight_smile:

Valter_Henrique

Marcos Lima:
iframe não é nada mais do que uma tag HTML que permite que vc inclua uma página dentro da outra: http://www.w3schools.com/TAGS/tag_iframe.asp

Abraço! :slight_smile:


Putz, resolveu os meus problemas,rs.
Valeu!

Obrigado GUJ!

Criado 5 de dezembro de 2010
Ultima resposta 6 de dez. de 2010
Respostas 8
Participantes 5