[Resolvido] Dúvida sobre upload de arquivos

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

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

mas esse framework só possibilita upload de imagens?

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.

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

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(&quot;multipart/form-data&quot;))
            {
            	setErro(&quot;Seu formulário não envia arquivos&quot;);
                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(&quot;&quot;))){
                            
                        	filename = (new File(filename)).getName();
                            
                            if(isPermission(filename)){
                            	item.write(new File(path + &quot;/&quot; + filename));
                            }
                            else{
                            	setErro(&quot;Arquivo não permitido&quot;);
                            	return false;
                            }
                        }

                    }
                }
                
            }catch(FileUploadBase.SizeLimitExceededException slee){
            	slee.printStackTrace();
            	setErro(&quot;Tamanho excedido&quot;);
            	return false;
                
            }catch (Exception e) {
            	setErro(&quot;Uma Exceção ocorreu: &quot;+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,&quot; ,.?! \'-:;|&quot;);
		while(st.hasMoreTokens()){
			if (lowerCaseName.endsWith(&quot;.&quot;+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!

Se tiver alguma duvida estamos aqui!!!

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.