UploadFile c/ Servlet

2 respostas
rbroz85

Boa noite senhores,

Estou fazendo um fileupload com servlet usando o jakarta fileupload.
mas meu problema não é enviar o arquivo. é sim resgatar mais um parametro do meu form, eu li em alguns foruns e outrso sites. que quando o form é multpart/form-data ele nao funciona com o request.getParameter("item");,
gostaria de saber se existe alguma outra forma de recuperar esse parametro:

posto aqui meu servlet de upload, com restriçao de tamanho e de extenção e mudança de nome para a data e hora ,funcinando.

/*
 * uploadServlet.java
 *
 * Created on March 17, 2007, 4:26 PM
 */

package upload;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;

import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 *
 * @author Razbrouser
 * @version
 */
public class uploadServlet extends HttpServlet {
    
private String msg = null;
private String path="C:\\temp\\";
private String filename = null;
    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getPath() {
        return path;
    }

    public void setFilename(String filename) {
        this.filename = filename;
    }

    public String getFilename() {
        return filename;
    }


    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
//        String idProjeto = request.getInputStream("idProjeto");
          
        int MB = 1024 * 1024;
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);       
        FileItemFactory factory = new DiskFileItemFactory();   
        ServletFileUpload upload = new ServletFileUpload(factory);
        
        try{
            upload.setSizeMax(MB);

            List items = upload.parseRequest(request);
            Iterator iter = items.iterator();

            while (iter.hasNext()) {
                FileItem item = (FileItem) iter.next();

                if(!item.isFormField()){
                    setFilename(item.getName());
                    if((getFilename()!=null)&&(!getFilename().equals(""))){
                        if(isPermission(getFilename())){
                            setFilename((new File(getFilename())).getName());
                            String[] nomeSplit = getFilename().split("\\.");
                            setFilename(nomeData()+"."+nomeSplit[1]);
                            item.write(new File(getPath() +getFilename()));
                            setMsg(getFilename()+" - Arquivo enviado com sucesso!");
                        }
                        else{
                            setMsg("Arquivo não permitido para upload");
                            imprimir(request, response);
                        }
                    }
                }
            }
        }
        catch(FileUploadBase.SizeLimitExceededException slee){
            slee.printStackTrace();
            setMsg("Tamanho exedido"); 
            setFilename("");
            imprimir(request, response);
        }
        catch(Exception e){
            e.printStackTrace();     
        }

//        response.sendRedirect("index.jsp");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet uploadServlet</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("File Uploaded Proprieties <br><rh>");
        out.println("nome do arquivo: <strong>"+ getFilename() +"</strong><br>");
        out.println("path do arquivo: <strong>"+ getPath() +"</strong><br>");
//        out.println("idProjeto: <strong>"+ idProjeto +"</strong><br>");
        out.println("Erro de tamanho: <strong>"+ getMsg() +"</strong>");
        out.println("</body>");
        out.println("</html>");

        out.close();
        

        
    }
    private boolean isPermission(String fileName){
        String lowerCaseName = fileName.toLowerCase();
        StringTokenizer st = new StringTokenizer("jpg,JGP,jpeg,JPEG,gif,GIF,doc,DOC,txt,TXT"," ,");
        while(st.hasMoreTokens()){
            if(lowerCaseName.endsWith("."+st.nextToken())){
               return true; 
            }
        }
        return false;
    }
    
    private void imprimir (HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet uploadServlet</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("File Uploaded errors <br><rh>");
        out.println("Erro: <strong>"+ getMsg() +"</strong>");
        out.println("</body>");
        out.println("</html>");

        out.close();
    }
    
    private String nomeData(){
        Date hoje = new Date(); 
        System.out.println ("A data de hoje é: "+ hoje);
        SimpleDateFormat formatter = new SimpleDateFormat("yyMMddhhmmss"); 
        String nome = formatter.format(hoje);
        return nome;
    }
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    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
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
}
aki esta o jsp:
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

    <h1>JSP Page</h1>
    
    <form name="form1" method="post" action="uploadServlet" enctype="multipart/form-data">
        Arquivo:<input type="file" name="fileItem" value="" width="30" />
        Projeto:<input type="text" name="idProjeto" id="idProjeto" value="33" />
        <input type="submit" value="Send" />
    </form>
    
    </body>
</html>

2 Respostas

V
Cara, na verdade o que você quer pegar é isso no seu código?

//String idProjeto = request.getInputStream(idProjeto);

Pq vc usou getInputStream?

Eu fiz uma aplicação parecida com essa, e usei desse jeito:

String idProjeto = upload.getParameter(idProjeto);

Tenta assim!
rbroz85

Opa, Vinicios Saraiva.

Obrigado pela atençao.
bem, eu já tentei usar o getParameter("idProjeto")
porem me retorna Null, isso ocorre pq meu formulario na minha jsp é multipart/form-data.
eu achei algumas soluçoes para isso. mas mesmo assim um pouco complexo, queria se existisse algo mais simples .
as soluçoes que eu encontrei foram essas:

colocar a variavel na queryString qunado chamar o servlet
(eu usei essa) blz funcionou
usei assim:

[/code]

" enctype="multipart/form-data">
Arquivo:
[code]
onde o numero 1 vai ser substituido por uma variavel int qualquer.

as outras soluçoes :
Solution A:

1. download http://www.servlets.com/cos/index.html
2. invoke getParameters() on com.oreilly.servlet.MultipartRequest

Solution B:

1. download http://jakarta.apache.org/commons/sandbox/fileupload/
2. invoke readHeaders() in
org.apache.commons.fileupload.MultipartStream

Solution C:

1. download http://users.boone.net/wbrameld/multipartformdata/
2. invoke getParameter on
com.bigfoot.bugar.servlet.http.MultipartFormData

Solution D:

Use Struts. Struts 1.1 handles this automatically.

acho que vou deixar da forma com querystring mesmo, esta mais simples. pois eu so precisava do idprojeto num campo hidden

mas blz, o codigo de upload de arquivo esta ae funcionando, quem quizer é so pegar,
mt obrigado vinicios abraçao

Criado 18 de março de 2007
Ultima resposta 19 de mar. de 2007
Respostas 2
Participantes 2