[Resolvido] Dúvida sobre upload de arquivos

7 respostas
Beto_Torres

Pessoal a dúvida é a seguinte:

Para fazer upload de arquivos online, tô usando o seguinte código:

boolean isMultipart = FileUpload.isMultipartContent(request);
   if (isMultipart) {
      DiskFileUpload upload = new DiskFileUpload();

      upload.setSizeMax(5*1024*1024);
      upload.setRepositoryPath("DIRETORIO");

      List items = upload.parseRequest(request);

      Iterator it = items.iterator();
      while (it.hasNext()) {
         FileItem fitem = (FileItem) it.next();
         if (!fitem.isFormField()) {

             fitem.write(new File("DIRETORIO"+nome+".jpg"));

         }
      }
   }

Rodando local funciona 100%

Rodando online não funciona

Em “DIRETORIO”, já tentei várias coisas mais não deram certo.

Algo também como:

  1. Alterei as permissões da pasta do .war pra 777
  2. Coloquei em uma pasta fora do .war
  3. Coloquei uma pasta upload em “/WEB-INF/upload” também com atb 777

E gera:

Como faço pra resolver isso?

Valeu

7 Respostas

Gustavo_Sperandio

Você esta usando alguma framework? pergunto porque acho que seria mais fácil deixar isso por conta dela, tipo: http://www.primefaces.org/showcase/ui/fileUploadHome.jsf

R

mas esse framework só possibilita upload de imagens?

Gustavo_Sperandio

Não esse é o exemplo em que você pode limitar determinado tipo de arquivo no componente, eu mesmo coloco para fazer qualquer tipo de arquivo.

R

ahh eh verdade, ali no alow types ne, tem como limitar o tamanho do arquivo

Beto_Torres

Galera consegui fazer o upload certinho assim:

index.jsp

<%@page import="org.apache.jasper.tagplugins.jstl.core.Import"%>
<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Fazendo Upload de arquivos</title>
</head>
<body>
	<jsp:useBean id="upl" scope="page" class="meupacote.UploadBean" />
	<jsp:setProperty name="upl" property="diretorio" value="arquivos"/>
	<jsp:setProperty name="upl" property="size" value="1"/>
	<jsp:setProperty name="upl" property="extensoesPermitidas" value="jpg, gif, pdf, doc, odt, zip"/>
<%
	if(upl.doFilePost(request,application)){
		out.println(upl.getFilename());
	}
	else{
		if(upl.getErro()!=null)
			out.println(upl.getErro());
	}
%>

	<form method="post" action="index.jsp" enctype="multipart/form-data">
	     Arquivo: &lt;input type="file" name="file" /&gt;<br />
	     &lt;input type="submit" name="submit" value="Enviar" /&gt;
	&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;

UploadBean.java

package meupacote;

import java.io.File;
import java.util.*;

import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletContext;
import javax.servlet.http.*;


public class UploadBean {

    private DiskFileItemFactory fileUpload = new DiskFileItemFactory();
    private ServletFileUpload sfu = new ServletFileUpload(fileUpload);

    private String diretorio;
    private String filename;
    private static int KB = 1024;
    private static int MB = 1024 * 1024;
    private int size;
    private String extensoesPermitidas;
	    
    private String erro=null;
    
	public void setDiretorio(String diretorio) {
		this.diretorio = diretorio;
	}

	public String getDiretorio() {
		return diretorio;

	}	    	        

	public String getFilename() {
		return filename;
	}
	

	public boolean doFilePost(HttpServletRequest request,
							ServletContext context)
    {
            if (request.getContentType() == null){
            	return false;
            }
                

            if (!request.getContentType().startsWith("multipart/form-data"))
            {
            	setErro("Seu formulário não envia arquivos");
                return false;
            }
         
            
            fileUpload.setSizeThreshold(4 * KB);
            
           
            String path = context.getRealPath(getDiretorio());
            try
            {
            	sfu.setSizeMax(getSize() * MB);
            	
                List list = sfu.parseRequest(request);
                

                for (Iterator iterator = list.iterator(); iterator.hasNext();) {
                    FileItem item = (FileItem)iterator.next();

                    if (!item.isFormField()){
                        filename = item.getName();
                        
                        
                        if ((filename != null) && (!filename.equals(""))){
                            
                        	filename = (new File(filename)).getName();
                            
                            if(isPermission(filename)){
                            	item.write(new File(path + "/" + filename));
                            }
                            else{
                            	setErro("Arquivo não permitido");
                            	return false;
                            }
                        }

                    }
                }
                
            }catch(FileUploadBase.SizeLimitExceededException slee){
            	slee.printStackTrace();
            	setErro("Tamanho excedido");
            	return false;
                
            }catch (Exception e) {
            	setErro("Uma Exceção ocorreu: "+e.getMessage());
                e.printStackTrace();
                return false;
            }

            return true;
    }   


/*
    public boolean isPermission(String fileName)
    {
        String lowerCaseName = fileName.toLowerCase();
        for (int i = 0; i &lt; extensoesPermitidas.length; i++)
        {
            if (lowerCaseName.endsWith(extensoesPermitidas[i]))
                return true;
        }
        return false;
    }
*/

	public void setSize(int size) {
		this.size = size;
	}

	public int getSize() {
		return size;
	}

	private void setErro(String erro) {
		this.erro = erro;
	}

	public String getErro() {
		return erro;
	}

	public void setExtensoesPermitidas(String extensoesPermitidas) {
		this.extensoesPermitidas = extensoesPermitidas;
	}

	public String getExtensoesPermitidas() {
		return extensoesPermitidas;
	}

	public boolean isPermission(String fileName)
	{
		String lowerCaseName = fileName.toLowerCase();
		StringTokenizer st = new StringTokenizer(extensoesPermitidas," ,.?! \'-:;|");
		while(st.hasMoreTokens()){
			if (lowerCaseName.endsWith("."+st.nextToken()))
				return true;     	
		}

		return false;
	}


}

Daí ele faz upload para uma pasta chamada arquivos.

Bom, tá aí uma dica pra quem ainda não conseguiu!

Gustavo Sperandio

Valeu pela dica do PrimeFaces, não conhecia e achei muito legal, vou tentar aprender!

Gustavo_Sperandio

Se tiver alguma duvida estamos aqui!!!

devvdevv.interior

Beto_Torres

Estava fazendo uns testes igual ao seu e do livro.
Desenvolvendo Aplicações Web com JSP Servelets JSF Hibernate EJB 3 Persistence e Ajax.therebels.robertosilva

Pórem já que conseguiu, eu fazendo os teste e até testando o seu proprio código não consigo localizar os arquivos do UPLOAD
no meu caso eu gostaria que eles ficassem no WEB-INF/Imagens…

e sobre essas permissoes seria para poder fazer o upload em uma pasta do projeto?

se poder me ajudar.
fico muito agradecido.

Criado 25 de março de 2011
Ultima resposta 20 de jun. de 2011
Respostas 7
Participantes 4