Problemas com o commons fileupload

Preciso de ajuda nesse código:

Obs: Eu entro com os dados na página addmonografia.jsp, que envia os dados para a página processaaddmonografia.jsp. E esta utiliza a classe UploadPdf.java para concretizar o upload.

//Página addmonografia.jsp

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<jsp:useBean id="sessao" scope="session" class="java.lang.String" />

<%@ page import="java.sql.*, conexao.*, java.util.*, cabecalho.*, security.*, uploadPdf.*" %>

<%
        boolean flag = false;
//Recebe o nome do arquivo que será carregado
        String impressao = "<p style='color:#FF0000'>Não foi carregado nenhum arquivo, clique <a href='addarqmonografia.jsp'>aqui</a> para carregar</p>";
        String nomeArq = null;
        String extensao = "";
        if (request.getParameter("arq") != null) {
            flag = true;
            extensao = ".pdf";
            impressao = request.getParameter("arq");
            nomeArq = impressao + extensao;
        }

//Verifica se o usuário está logado
        String login = sessao;
        Autenticacao autenticacao = new Autenticacao();
        if (!autenticacao.verificaUsuario(login)) {  // se não estiver logado, redireciona-o para a página de login
            if (flag) {
                response.sendRedirect(autenticacao.endereco + "addmonografia?arq=" + impressao);
            } else {
                response.sendRedirect(autenticacao.endereco + "addmonografia");
            }
        }

        impressao = impressao + extensao;

//Carrega o cabeçalho
        Cabecalho cab = new Cabecalho();
%>

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>:: CACC - Centro Acad&ecirc;mico da Ci&ecirc;ncia da Computa&ccedil;&atilde;o ::</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <script language="JavaScript" type="text/JavaScript">
            function validaarquivo(campo){  
                TamanhoString = campo.length;  
                extensao   = campo.substr(TamanhoString - 4,TamanhoString);  
                if (TamanhoString == 0){  
                    alert('Você precisa selecionar um arquivo antes de transmitir.');  
                    return false;  
                }else{  
                var ext = new Array('.pdf');//adicione as extensões desejadas  
                for(var i = 0; i < ext.length; i++){   
                    if (extensao == ext[i]){  
                        flag = "ok";  
                        break;  
                    }else{  
                    flag = "erro";                                
                }  
            }  
            if (flag=="erro"){  
                alert("Tipo de arquivo inválido.\nCarregue um arquivo com extensão PDF");
                document.fr_addMonografia.url_mono.value="";              
                return false;  
            }  
        }  
        //caminhourl = "processauploadmonografia.jsp";  
        //document.forms[0].action = caminhourl;  
        //window.document.forms[0].submit();   
        return true;  
    }
        </script>
    </head>
    <body>
        <%= cab.cabecalhoDiv %>
        <table align="center" width="100%" border="0" cellspacing="0" cellpadding="0">
            <%= cab.cabecalhoB %>
            <tr id="corpo">
                <td>
                    <table width="100%" border="5" cellpadding="20" cellspacing="0" bordercolor="#000000">
                        <tr>
                            <td align="left" valign="top"><h1>Incluir Monografia</h1>
                                <p>&nbsp;</p>
                                <form action="processaaddmonografia.jsp" method="post" name="fr_addMonografia" id="fr_addMonografia" onsubmit="MM_validateForm('autor_mono','','R','curso_mono','','R','tema_mono','','R','orientador_mono','','R','componente1_banca','','R','presidente_banca','','R','data_defesa_mono','','R','url_mono','','R');return document.MM_returnValue">
                                    <table width="500" border="0" cellspacing="1" cellpadding="4">
                                        <tr>
                                            <td width="142" nowrap="NOWRAP">Arquivo:
                                            </td>
                                            <td colspan="3" nowrap="NOWRAP">
                                                <input type="file" name="url_mono" id="url_mono" onchange="return validaarquivo(fr_addMonografia.url_mono.value)" />
                                            </td>
                                        </tr>
                                        <tr>
                                            <td width="142" nowrap="NOWRAP">Autor:</td>
                                            <td colspan="3" nowrap="NOWRAP">
                                                <input name="autor" type="text" id="autor" size="50" maxlength="80" />
                                                <%-- if(request.getParameter("falta").equals("autor")) --%>
                                                <p style='color:#FF0000'><small>*Preencha o campo autor</small></p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td width="142" nowrap="NOWRAP">Curso:</td>
                                            <td colspan="3"><input name="curso" type="text" id="curso" size="50" maxlength="60" /></td>
                                        </tr>
                                        <tr>
                                            <td width="142" nowrap="NOWRAP">Tema:</td>
                                            <td colspan="3"><input name="tema" type="text" id="tema" size="50" maxlength="100" /></td>
                                        </tr>
                                        <tr>
                                            <td width="142" nowrap="NOWRAP">Delimita&ccedil;&atilde;o do tema:</td>
                                            <td colspan="3"><input name="delimitacao_tema" type="text" id="delimitacao_tema" size="50" maxlength="100" />
                                            </td>
                                        </tr>
                                        <tr>
                                            <td width="142" nowrap="NOWRAP">Orientador:</td>
                                            <td colspan="3"><input name="orientador" type="text" id="orientador" size="50" maxlength="80" /></td>
                                        </tr>
                                        <tr>
                                            <td width="142" nowrap="NOWRAP">Componente da Banca:</td>
                                            <td colspan="3"><input name="componente1_banca" type="text" id="componente1_banca" size="50" maxlength="80" /></td>
                                        </tr>
                                        <tr>
                                            <td width="142" nowrap="NOWRAP">Componente da Banca:</td>
                                            <td colspan="3"><input name="componente2_banca" type="text" id="componente2_banca" size="50" maxlength="80" /></td>
                                        </tr>
                                        <tr>
                                            <td width="142" nowrap="NOWRAP">Componente da Banca:</td>
                                            <td colspan="3"><input name="componente3_banca" type="text" id="componente3_banca" size="50" maxlength="80" /></td>
                                        </tr>
                                        <tr>
                                            <td width="142" nowrap="NOWRAP">Presidente da Banca:</td>
                                            <td colspan="3"><input name="presidente_banca" type="text" id="presidente_banca" size="50" maxlength="80" /></td>
                                        </tr>
                                        <tr>
                                            <td width="142" nowrap="NOWRAP">Data da defesa:</td>
                                            <td colspan="3"><input name="data_defesa" type="text" id="data_defesa" size="50" maxlength="10" /></td>
                                        </tr>
                                        <tr>
                                            <td width="142" nowrap="NOWRAP">
                                                <input name="userc" type="hidden" id="userc" value="<%= login %>" />
                                            </td>
                                            <td width="80">
                                                <input type="submit" name="Submit" value="Salvar" />
                                            </td>
                                            <td width="251" colspan="2">
                                                <div align="left">
                                                    <input type="reset" name="Submit2" value="Limpar" />
                                                </div>
                                            </td>
                                        </tr>
                                    </table>
                                </form>          
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
            <tr>
            <td>&nbsp;</td>
        </table>
    </body>
</html>
//Página: processaaddmonografia.jsp

<%@page import="org.apache.tomcat.util.http.fileupload.FileItem"%>
<%@page import="org.apache.tomcat.util.http.fileupload.FileUpload"%>
<%@page import="org.apache.tomcat.util.http.fileupload.DiskFileUpload"%>
<%@page import="java.io.*, java.util.*, org.apache.commons.fileupload.*"%>
<%@page import="conexao.*, java.sql.*, uploadPdf.*, uploadPdf.*" contentType="text/plain"%>
<%
        String autor = (String) request.getParameter("autor");
        String curso = (String) request.getParameter("curso");
        String tema = (String) request.getParameter("tema");
        String delimitacao_tema = (String) request.getParameter("delimitacao_tema");
        String orientador = (String) request.getParameter("orientador");
        String componente1_banca = (String) request.getParameter("componente1_banca");
        String componente2_banca = (String) request.getParameter("componente2_banca");
        String componente3_banca = (String) request.getParameter("componente3_banca");
        String presidente_banca = (String) request.getParameter("presidente_banca");
        String data_defesa = (String) request.getParameter("data_defesa");
        String url_mono;


            String userc = (String) request.getParameter("userc");

            if (autor != null && curso != null && tema != null && orientador != null &&
                    componente1_banca != null && presidente_banca != null && data_defesa != null) {
                Class.forName("org.firebirdsql.jdbc.FBDriver");
                Connection con = DriverManager.getConnection("jdbc:firebirdsql://localhost:3050/E:\\Documentos\\CACC\\web\\BANCO.FDB", "SYSDBA", "masterkey");
                Statement st = null;
                st = con.createStatement();
                String sql;
                sql = "INSERT INTO MONOGRAFIA(AUTOR, CURSO, TEMA, DELIMITACAO_TEMA, ORIENTADOR, COMPONENTE1_BANCA, COMPONENTE2_BANCA, COMPONENTE3_BANCA, PRESIDENTE_BANCA, DATA_DEFESA, URL_MONO, USERC, USERA) VALUES('" + autor + "', '" + curso + "', '" + tema + "', '" + delimitacao_tema + "', '" + orientador + "', '" + componente1_banca + "', '" + componente2_banca + "', '" + componente3_banca + "', '" + presidente_banca + "', '" + data_defesa + "', '', '" + userc + "', '" + userc + "')";
                int cont = st.executeUpdate(sql);
                con.close();
                //st.close();
                Conexao con2 = new Conexao();
                ResultSet rs = con2.executarSQL("SELECT FIRST 1 COD_MONO FROM MONOGRAFIA ORDER BY COD_MONO DESC");
                int aux2 = 123456;
                while (rs.next()) {
                    aux2 = rs.getInt(1);
                }
                url_mono = "monografia_" + String.valueOf(aux2);
                con2.fecharConexao();

                Class.forName("org.firebirdsql.jdbc.FBDriver");
                Connection con3 = DriverManager.getConnection("jdbc:firebirdsql://localhost:3050/E:\\Documentos\\CACC\\web\\BANCO.FDB", "SYSDBA", "masterkey");
                Statement st2 = con3.createStatement();
                sql = "UPDATE MONOGRAFIA SET URL_MONO = '" + url_mono + "' WHERE COD_MONO = " + aux2;
                aux2 = st2.executeUpdate(sql);
                con3.close();

                UploadPdf upArq = new UploadPdf();
                boolean isMultipart = FileUpload.isMultipartContent(request);
                DiskFileUpload uploadArq = new DiskFileUpload();
                uploadArq.setSizeMax(50 * 1024 * 1024); //define o tamanho máximo do arquivo para upload = 50Mb
                List itens = uploadArq.parseRequest(request);
                Iterator it = itens.iterator(); // interação com os itens do upload
                UploadPdf up = new UploadPdf();
                up.uploadFilePdf(isMultipart, it);
                upArq.renomeiaArq(url_mono, "monografia");

                response.sendRedirect("monografias.jsp?status=sucesso");
            }
%>
//Classe UploadPdf.java

package uploadPdf;

import org.apache.tomcat.util.http.fileupload.FileItem;
import java.io.*;
import java.util.*;
import org.apache.commons.fileupload.*;
import conexao.*;
import java.sql.*;
import javax.servlet.http.*;

public class UploadPdf {

    private boolean erro;
    private String nomeArq;
    public String nomeSemExtensao;

    public UploadPdf() {
        setErro(false);
    }

    public void setErro(boolean erro) {
        this.erro = erro;
    }

    public boolean getErro() {
        return erro;
    }

    public String getNomeArq() {
        return nomeArq;
    }

    public void setNomeArq(String nomeArq) {
        this.nomeArq = nomeArq;
    }

        
    public boolean uploadFilePdf(boolean isMultipart, Iterator it) throws Exception {
        if (isMultipart) {
            while (it.hasNext()) {
                FileItem fItem = (FileItem) it.next();
                setNomeArq(fItem.getName()); // obtem o nome original do arquivo
                if ((getNomeArq() != null) && (!getNomeArq().equals("")) && (!getNomeArq().equals(" "))) {
                    if (separaNomeEExtensao()) {
                        StringBuffer sb = new StringBuffer();
                        sb.append("/Documentos/CACC/web/arqs/"); // define o diretório p/ gravar o arq
                        sb.append("monografia.pdf"); // armazena o nome do arq para gravação
                        //sb.append(getNomeArq());
                        //Cria, lê, converter o arquivo para String pois ele vem em bytes e grava o arquivo no servidor. Ex: /teste.txt  
                        File uploadedFile = new File(sb.toString());
                        fItem.write(uploadedFile);
                    } else {
                        setErro(true);
                    }
                } else {
                    if (getNomeArq() != null) {
                        setErro(true);
                    }
                }
            }

        }
        return getErro();
    }

    private boolean separaNomeEExtensao() {
        boolean flag;
        int tamNome = getNomeArq().length();
        String extensaoArq = getNomeArq().substring(tamNome - 4, tamNome);
        nomeSemExtensao = getNomeArq().substring(0, tamNome - 4);
        if (extensaoArq.equals(".pdf")) {
            flag = true;
        } else {
            flag = false;
        }
        return flag;
    }

    public void renomeiaArq(String novoNome, String tipo) {
        File nomeAntigo = new File("/Documentos/CACC/web/arqs/"+tipo+".pdf");
        File nomeNovo = new File("/Documentos/CACC/web/arqs/"+novoNome+".pdf");
        nomeAntigo.renameTo(nomeNovo);
    }
}

Que dá o seguinte erro:

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /processaaddmonografia.jsp at line 53

50:                 boolean isMultipart = FileUpload.isMultipartContent(request);
51:                 DiskFileUpload uploadArq = new DiskFileUpload();
52:                 uploadArq.setSizeMax(50 * 1024 * 1024); //define o tamanho máximo do arquivo para upload = 50Mb
53:                 List itens = uploadArq.parseRequest(request);
54:                 Iterator it = itens.iterator(); // interação com os itens do upload
55:                 UploadPdf up = new UploadPdf();
56:                 up.uploadFilePdf(isMultipart, it);


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:524)
	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)

root cause

javax.servlet.ServletException: org.apache.tomcat.util.http.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/x-www-form-urlencoded
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)
	org.apache.jsp.processaaddmonografia_jsp._jspService(processaaddmonografia_jsp.java:131)
	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)

root cause

org.apache.tomcat.util.http.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is application/x-www-form-urlencoded
	org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:255)
	org.apache.jsp.processaaddmonografia_jsp._jspService(processaaddmonografia_jsp.java:115)
	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)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.14 logs.

Alguém sabe pq :?:

cara… comece a não usar scriptlets no seu código, pra isso tens várias opções, sem contar que hoje é inadimissível código java no jsp…

quando ao seu problema, no do jsp onde faz o upload vc precisa adicionar o multipart/form-data…

ficaria assim:

<form method="post" action="xxxx" enctype="multipart/form-data">

seu código ta tão integrado de java com jsp :shock: que não consegui achar isso, mas procure ai no form e acrescente isso…

se vc tiver iniciando, comece já utilizando as práticas de hoje…

flw Hewerton

Realmente usar código java em páginas jsp não fica elegante.
Tente usar servlet, ou mesmo modelos MVC :wink:

[quote]Javabuntu 30/03/2008 19:27:55 Assunto: Re:Problemas com o commons fileupload


cara… comece a não usar scriptlets no seu código, pra isso tens várias opções, sem contar que hoje é inadimissível código java no jsp…

quando ao seu problema, no do jsp onde faz o upload vc precisa adicionar o multipart/form-data…

ficaria assim:
view plaincopy to clipboardprint?

seu código ta tão integrado de java com jsp que não consegui achar isso, mas procure ai no form e acrescente isso…

se vc tiver iniciando, comece já utilizando as práticas de hoje…

flw Hewerton
[/quote]

Caro Heverton obrigado pela dica, vou tentar aplicar para ver se dá certo.

Qto a bagunça no código, como vc mesmo percebeu, sou iniciante. E esse site é o estágio de minha faculdade. Aki nós não temos base nenhuma para desenvolvimento web… e nem muito material a respeito. Os livros q peguei falavam pra fazer assim, por isso fiz.

Vc tem algum material q possa me ajudar a organizar o código? (apostila, ou qq coisa do gênero…)

Qto ao modelo MVC, como citou fbeli, eu conheço na teoria, mas não sei como aplicá-lo na prática. E tb não sei como usar servlet, como tb não estou usando framework…

De toda forma, estou grata pela ajuda!

Esse site é de um antigo professor, ele colocava lá o material de aula, é bem didático.

lá tem alguma coisa sobre jsp e servlet. Em 2 ou 3 dias vc consegue o básico de servlets, jsp.

Se o foco é mesmo java, se aprimora nisso, aprende a usar e corre pra um MVC qualquer.

http://www.templojava.org/index.jsp

Boa sorte

Fred Belisario

[quote=aplfdv][quote]Javabuntu 30/03/2008 19:27:55 Assunto: Re:Problemas com o commons fileupload


cara… comece a não usar scriptlets no seu código, pra isso tens várias opções, sem contar que hoje é inadimissível código java no jsp…

quando ao seu problema, no do jsp onde faz o upload vc precisa adicionar o multipart/form-data…

ficaria assim:
view plaincopy to clipboardprint?

seu código ta tão integrado de java com jsp que não consegui achar isso, mas procure ai no form e acrescente isso…

se vc tiver iniciando, comece já utilizando as práticas de hoje…

flw Hewerton
[/quote]

Caro Heverton obrigado pela dica, vou tentar aplicar para ver se dá certo.

Qto a bagunça no código, como vc mesmo percebeu, sou iniciante. E esse site é o estágio de minha faculdade. Aki nós não temos base nenhuma para desenvolvimento web… e nem muito material a respeito. Os livros q peguei falavam pra fazer assim, por isso fiz.

Vc tem algum material q possa me ajudar a organizar o código? (apostila, ou qq coisa do gênero…)

Qto ao modelo MVC, como citou fbeli, eu conheço na teoria, mas não sei como aplicá-lo na prática. E tb não sei como usar servlet, como tb não estou usando framework…

De toda forma, estou grata pela ajuda![/quote]

cara entendo, vc que está iniciando, eu diria que este livro é indispensável nesse momento, garanto que será um bom investimento nesse momento apesar dele não aprofundar muito nos assuntos…