Como definir uma pasta no tomcat em uma aplicação em um servidor de verdade?[RESOLVIDO]

Boa noite pessoal, estou com dificudades para definir uma pasta no servidor… quando uso da forma que esta abaixo. fica tudo espalhado dentro da pasta do tomcat no servidor… gostaria de definir uma para dentro da minha aplicacao… tipo: webapps/aplicacao/imsgens…
mas nao estou conseguindo… alguem sabe como fazer???

public imagens(ServletContext context) { String pastaImagens = context.getRealPath("/"); //pastaImagens = new File("/D:/croquis"); //pastaImagens.mkdir(); }

desde já agradeço…

Jovem,

No exemplo q vc citou, vc está buscando a raiz da sua aplicação. Por isso os arquivos ficam “espalhados”.
Se vc qr definir uma pasta, adicione o nome da pasta, onde está o seu getRealPath

Exemplo:

public imagens(ServletContext context) { String pastaImagens = context.getRealPath("/imagens/"); }

Com isso, em vez de pegar a raíz da sua aplicação, pegará a pasta imagens, que está na sua aplicação.

OBS.: Caso o caminho da sua pasta não seja esse, vc deverá informar no getRealPath.
Exemplo: raizTomCat/arquivos/imangens ficaria assim:

public imagens(ServletContext context) { String pastaImagens = context.getRealPath("/arquivos/imagens/"); }

Se não me engano já fiz isso. mas vou tentar novamente e já posto o resultado… vlw

Não esta fazendo diferença colocar a pasta /imagens no contexto… estao ficando todos os arquivos no mesmo lugar… :frowning:

Para debuggar, mande imprimir a variável pastaImagens. Poste seu código completo.
Recentemente eu fiz um relatório com Jasper e precisei muito disso. Talvez possa lhe ajudar.

Boa dica:
olhe os resultados:

public Imagens(ServletContext context) {
		 
		String pastaImagens = context.getRealPath("/imagens");// quando imprimo assim retorna NULL
		pastaImagens = new File("d:/imagens " );// e quando uso assim imprime o caminho: 
		
		 
	}

tem como eu definir uma pasta dentro do servidor usando isso pastaImagens = new File("caminho " );???

vlw

ah o codigo:

[code]package br.com.engtec.webgeo.imagens;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.servlet.ServletContext;

import org.apache.commons.io.IOUtils;

import br.com.caelum.vraptor.interceptor.multipart.UploadedFile;
import br.com.caelum.vraptor.ioc.Component;
import br.com.engtec.webgeo.modelo.Bci;

@Component
public class Imagens {

private File pastaImagens;

// este está OK!!!
public Imagens(ServletContext context) {
	 
	String pastaImagens = context.getRealPath("/imagens");
	//pastaImagens = new File(d:/imagens);
	//pastaImagens.mkdir();
	 
}

public void upload(UploadedFile imagem, Bci bci) throws IOException {
	File destino = new File(pastaImagens, bci.getInscricaoCadastral() + ".jpg");
	destino.createNewFile();

	try {
		IOUtils.copy(imagem.getFile(), new FileOutputStream(new File(
				pastaImagens, bci.getInscricaoCadastral() + ".jpg")));
	} catch (FileNotFoundException e) {
		e.printStackTrace();
		throw new FileNotFoundException("Arquivo não encontrado!");
	} catch (IOException e) {
		e.printStackTrace();
		throw new IOException("Não foi possível enviar o arquivo!");
	}

	System.out.println("Teste para saber se passa por aki!!!");
	imagem.getFile().close();

}

// este metodo está OK!!!
public File mostra(Bci bci) {
	
	File file = new File(pastaImagens, bci.getInscricaoCadastral() + ".jpg");
	System.out.println(pastaImagens+" esse é o resultado");
	return (file.exists()) ? file : new File(pastaImagens + "/default.jpg");
	
}

}
[/code]

Uhm…

Olhei uma coisa no seu código meio interessante. Vc criou o método Imagens, mas não está passando o ServletContext para ele, por isso imprime null. No outro caso, vc está passando o diretório do seu HD. Se o TomCat estiver instalado em um computador que não tenha o D:, seu código sai furado.

Sugiro vc mudar um pouco aqui:

[code]public String Imagens() {

	String pastaImagens = getServletContext().getRealPath("/imagens");// quando imprimo assim retorna NULL
	//pastaImagens = new File("d:/imagens " );// e quando uso assim imprime o caminho: 
            return pastaImagens;
}[/code]

Depois, chame o método Imagens() para pegar corretamente o diretório.
Mande impromir o resultado para ver se pegou o caminho da pasta corretamente.

AH! Mais uma pergunta: Qual é a sua IDE de desenvolvimento?

Meu computador tem d:/xxx e assim funciona legal… :slight_smile:
o negocio 'e quando eu jogo a aplicacao em um servidor de verdade… ai tem que saber o endereco correto… vou tentar o que me falou… ja posto o resultado…

uso o eclipse.

Nao funcionou! :frowning: isso esta muit estranho…

Imprimiu o resultado do contexto direito?

Como vc usa o eclipse, ele vai te passar o diretório que está rodando o seu “servidor web” no eclipse.
Ficaria algo mais ou menos assim: D:\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\reserva\relatorios

No meu caso, é pq o meu workspace está no D:\workspace

Fico muito agradecido por sua ajuda… suas dicas foram certeira… mudei algumas coisas. veja como ficou:

@Component
public class Imagens {

	private static final String pastaImagens = System.getProperty("user.home")+"/appservers/apache-tomcat-6x/webapps/img" ; // System.getProperty("user.home" ) - pega o diretorio raiz. concatenei como a pasta de destino que eu queria... e ai dei tudo certo :)


	public void upload(UploadedFile imagem, Bci bci) throws IOException {
		File destino = new File(pastaImagens, bci.getInscricaoCadastral() + ".jpg");
		destino.createNewFile();

		try {
			IOUtils.copy(imagem.getFile(), new FileOutputStream(new File(
					pastaImagens, bci.getInscricaoCadastral() + ".jpg")));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			throw new FileNotFoundException("Arquivo não encontrado!");
		} catch (IOException e) {
			e.printStackTrace();
			throw new IOException("Não foi possível enviar o arquivo!");
		}

		imagem.getFile().close();

	}

	public File mostra(Bci bci) {
		File file = new File(pastaImagens, bci.getInscricaoCadastral() + ".jpg");
		return (file.exists()) ? file : new File(pastaImagens + "/default.jpg");
		
	}
}

vlw obrigado pela ajuda…

Sem erros, jovem!

No que eu posso ajudar, eu tento. Não sou muito bom (ainda) em Java, mas no que eu puder ajudar, eu tento.
Precisando, é só falar.