Após upar um arquivo para o diretorio do projeto o arquivo some toda vez que subo o servidor

15 respostas
W

Bom dia pessoal, estou tendo um problema com uma aplicação de cadastro em que tenho que fazer upload de foto.

Tá cadastrando e alterando perfeitamente, tá gravando o endereço que eu quero no banco, tudo beleza.

Porém, se eu restartar o servidor (tomcat 7) os arquivos que eu tinha feito upload antes simplesmente somem.

Alguém sabe o que pode estar acontecendo? É algo errado no meu código ou é alguma outra coisa em relação ao servidor de aplicação em si?

O código da minha servlet está logo abaixo.

ps: Sou inexperiente na área, essa aplicação faz parte justamente do meu projeto final para o meu curso na faculdade, qualquer ajuda ou melhora é bem vinda.

Agradeço desde já.

package br.com.tatico.view;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import br.com.tatico.model.*;
public class AreaAction extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
    private static final String DESTINATION_DIR_PATH = "/images";  
    private File destinationDir;  
  
    public void init(ServletConfig config) throws ServletException {  
        super.init(config);  
        String realPath = getServletContext().getRealPath(DESTINATION_DIR_PATH);  
        destinationDir = new File(realPath);  
        if (!destinationDir.isDirectory()) {  
            throw new ServletException(DESTINATION_DIR_PATH + " is not a directory");  
        }  
    }

	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		AreaDAO aDao = new AreaDAO();
		SetorDAO sDao = new SetorDAO();
		String action = req.getParameter("action");
		String page = null;
		
		boolean isMultiPart = ServletFileUpload.isMultipartContent(req);
		if(isMultiPart){
		    Area area = new Area();
		    DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();  
		    fileItemFactory.setSizeThreshold(1 * 1024 * 1024); //1 MB 
		
		    ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);  
		    try {  
		        List items = uploadHandler.parseRequest(req);  
		        Iterator itr = items.iterator();  
		        while (itr.hasNext()) {  
		            FileItem item = (FileItem) itr.next(); 

		            if (item.isFormField()) { 
		            	String field = item.getFieldName();
		            	String value = item.getString();

		                if(field.equals("nomeArea"))
		                	area.setNomeArea(value);

		                else if(field.equals("idSetor"))
		                	area.setIdSetor(Integer.parseInt(value));

		                else if(field.equals("descArea"))
		                	area.setDescArea(value);

		                else if(field.equals("status"))
		                	area.setStatus(value);

		                else if(field.equals("action"))
		                	action = value;

		                else if(field.equals("id"))
		                	area.setIdArea(Integer.parseInt(value));

		            }else{ 
		                String nameFile = item.getName();
		                File file = new File(destinationDir, nameFile);
		                item.write(file);
		                area.setFotoArea("../images/"+item.getName());
		            } 
		        }
	
		        if(action.equals("insert")){
    				aDao.Insert(area);
    				req.setAttribute("areas", aDao.ReportActive());
    				page="../auth/home.jsp";
		        }else if(action.equals("saveUpdate")){
		        	aDao.Update(area);
					req.setAttribute("area", aDao.SearchId(area.getIdArea()));
					page="../auth/showArea.jsp";
		        }
		    } catch (FileUploadException ex) {  
		        ex.printStackTrace();  
		    } catch (Exception ex) {  
		        ex.printStackTrace();  
		    }
		}

		RequestDispatcher rd = req.getRequestDispatcher(page);
		rd.forward(req, resp);
	}	
}

15 Respostas

Hebert_Coelho

“/images” esse diretório ta dentro ou fora da pasta do servidor?

W

Dentro da pasta do projeto na pasta do tomcat.

C:\Program Files\Apache\apache-tomcat-7.0.26\wtpwebapps\cit\images

Hebert_Coelho

Pois é. Não é aconselhável criar e manipular pastar dentro servidor. Cria fora dele que você será ainda mais feliz. [=

W
jakefrog:
Pois é. Não é aconselhável criar e manipular pastar dentro servidor. Cria fora dele que você será ainda mais feliz. [=

Entendi, valeu.

Então por exemplo, eu criando uma pasta no C: para as imagens ficaria mais ou menos assim?

public class AreaAction extends HttpServlet {  
    private static final long serialVersionUID = 1L;  
      
    private static final String DESTINATION_DIR_PATH = "C:\CIT_images";    
    private File destinationDir;    
    
    public void init(ServletConfig config) throws ServletException {    
        super.init(config);    
        destinationDir = new File(DESTINATION_DIR_PATH);    
        if (!destinationDir.isDirectory()) {    
            throw new ServletException(DESTINATION_DIR_PATH + " is not a directory");    
        }    
    }
Hebert_Coelho

Como abaixo é melhor:
“/CIT_images”

Já cai na raiz do C: e fica uma solução portável para linux. ^^

W

jakefrog:
Como abaixo é melhor:
“/CIT_images”

Já cai na raiz do C: e fica uma solução portável para linux. ^^

Mas o problema de fazer desse jeito é que a imagem não estando no servidor não dá pra chamar direto pelo endereço na pagina JSP.

Como eu recupero ela agora?

Hebert_Coelho

“/CIT_images” é igual “C:/CIT_images”

Sacou?

Pode usar de qualquer jeito, só que “/CIT_images” também funciona no linux.

W

jakefrog:
"/CIT_images" é igual “C:/CIT_images”

Sacou?

Pode usar de qualquer jeito, só que “/CIT_images” também funciona no linux.

Isso eu saquei, só que lá na jsp se eu chamar a imagem não aparece

Hebert_Coelho

Saquei.

Eu costumo trabalhar com JSF e ele tem um modo diferente de tratar essa situação.

Você poderia fazer algo do tipo: http://www.roseindia.net/answers/viewqa/JSP-Servlet/18294-how-to-display-one-image-on-jsp-through-java.html

B

jakefrog:
Saquei.

Eu costumo trabalhar com JSF e ele tem um modo diferente de tratar essa situação.

Você poderia fazer algo do tipo: http://www.roseindia.net/answers/viewqa/JSP-Servlet/18294-how-to-display-one-image-on-jsp-through-java.html


Olá jakefrog!

Estou com o mesmo problema (http://www.guj.com.br/java/272038-jsf-2-redenrizar-imagem-fora-do-contexto-da-aplicacao#1427588) e utilizo JSF 2. Como vc costuma fazer em JSF?

Vlw :wink:

Hebert_Coelho

blastec:
jakefrog:
Saquei.

Eu costumo trabalhar com JSF e ele tem um modo diferente de tratar essa situação.

Você poderia fazer algo do tipo: http://www.roseindia.net/answers/viewqa/JSP-Servlet/18294-how-to-display-one-image-on-jsp-through-java.html


Olá jakefrog!

Estou com o mesmo problema (http://www.guj.com.br/java/272038-jsf-2-redenrizar-imagem-fora-do-contexto-da-aplicacao#1427588) e utilizo JSF 2. Como vc costuma fazer em JSF?

Vlw ;)

Com o primefaces. Com ele você pode localizar a imagem pelo ManagedBean. [=

Hebert_Coelho

jakefrog:
blastec:
jakefrog:
Saquei.

Eu costumo trabalhar com JSF e ele tem um modo diferente de tratar essa situação.

Você poderia fazer algo do tipo: http://www.roseindia.net/answers/viewqa/JSP-Servlet/18294-how-to-display-one-image-on-jsp-through-java.html


Olá jakefrog!

Estou com o mesmo problema (http://www.guj.com.br/java/272038-jsf-2-redenrizar-imagem-fora-do-contexto-da-aplicacao#1427588) e utilizo JSF 2. Como vc costuma fazer em JSF?

Vlw ;)

Com o primefaces. Com ele você pode localizar a imagem pelo ManagedBean. [=
Uma outra abordagem você encontra aqui: http://www.coderanch.com/t/529137/JSF/java/Displaying-image-BLOB-JSF-page

B

jakefrog:
jakefrog:
blastec:
jakefrog:
Saquei.

Eu costumo trabalhar com JSF e ele tem um modo diferente de tratar essa situação.

Você poderia fazer algo do tipo: http://www.roseindia.net/answers/viewqa/JSP-Servlet/18294-how-to-display-one-image-on-jsp-through-java.html


Olá jakefrog!

Estou com o mesmo problema (http://www.guj.com.br/java/272038-jsf-2-redenrizar-imagem-fora-do-contexto-da-aplicacao#1427588) e utilizo JSF 2. Como vc costuma fazer em JSF?

Vlw ;)

Com o primefaces. Com ele você pode localizar a imagem pelo ManagedBean. [=
Uma outra abordagem você encontra aqui: http://www.coderanch.com/t/529137/JSF/java/Displaying-image-BLOB-JSF-page

Olá! Como estou usando o Primefaces, tentei da seguinte forma:

public StreamedContent getFile() {
		InputStream stream = this.getClass().getResourceAsStream("C:\\aie\\image\\1161_arara.JPG");
		file = new DefaultStreamedContent(stream, "image/jpeg");
		
		return file;
	}
<p:graphicImage value="#{fotoBean.file}" />

Só que dá a seguinte mensagem no console:

04/05/2012 11:17:16 com.sun.faces.context.ExternalContextImpl getMimeType
AVISO: JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo dynamiccontent.  Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
04/05/2012 11:17:20 org.primefaces.application.PrimeResourceHandler handleResourceRequest
GRAVE: Error in streaming dynamic resource.

Sabe o que pode ser?

Hebert_Coelho

blastec:
jakefrog:
jakefrog:
blastec:
jakefrog:
Saquei.

Eu costumo trabalhar com JSF e ele tem um modo diferente de tratar essa situação.

Você poderia fazer algo do tipo: http://www.roseindia.net/answers/viewqa/JSP-Servlet/18294-how-to-display-one-image-on-jsp-through-java.html


Olá jakefrog!

Estou com o mesmo problema (http://www.guj.com.br/java/272038-jsf-2-redenrizar-imagem-fora-do-contexto-da-aplicacao#1427588) e utilizo JSF 2. Como vc costuma fazer em JSF?

Vlw ;)

Com o primefaces. Com ele você pode localizar a imagem pelo ManagedBean. [=
Uma outra abordagem você encontra aqui: http://www.coderanch.com/t/529137/JSF/java/Displaying-image-BLOB-JSF-page

Olá! Como estou usando o Primefaces, tentei da seguinte forma:

public StreamedContent getFile() {
		InputStream stream = this.getClass().getResourceAsStream("C:\\aie\\image\\1161_arara.JPG");
		file = new DefaultStreamedContent(stream, "image/jpeg");
		
		return file;
	}
<p:graphicImage value="#{fotoBean.file}" />

Só que dá a seguinte mensagem no console:

04/05/2012 11:17:16 com.sun.faces.context.ExternalContextImpl getMimeType
AVISO: JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo dynamiccontent.  Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
04/05/2012 11:17:20 org.primefaces.application.PrimeResourceHandler handleResourceRequest
GRAVE: Error in streaming dynamic resource.

Sabe o que pode ser?

Cara, agora q eu percebi que estamos estragando o post do parceiro que abriu aqui.

Esse erro eu lembro que resolvi a muito tempo mas procurei no google o q era. Mals ae não saber de cabeça.

W

jakefrog:
Saquei.

Eu costumo trabalhar com JSF e ele tem um modo diferente de tratar essa situação.

Você poderia fazer algo do tipo: http://www.roseindia.net/answers/viewqa/JSP-Servlet/18294-how-to-display-one-image-on-jsp-through-java.html

Resolvi com esse link aqui.

http://stackoverflow.com/questions/1812244/simplest-way-to-serve-static-data-from-outside-the-application-server-in-a-java

Fazendo essa servlet e mapeando lá direitinho eu simplesmente chamo e funciona perfeitamente.

Valeuzão aí pela ajuda :slight_smile:

Criado 4 de maio de 2012
Ultima resposta 4 de mai. de 2012
Respostas 15
Participantes 3