Como obter o caminho físico completo de uma pasta utilizando VRaptor

7 respostas
L

Olá pessoal,

Estou fazendo uma app de upload de imagens, mas só conseguir fazer o upload informando o caminho completo para a pasta que no meu caso atual é
/media/Projetos/workspace/webTest/WebContent/uploads

Mas eu gostaria de saber se há alguma função para recuperar o caminho do projeto no workspace “/media/Projetos/workspace/webTest”

Andei procurando no forum mas não consegui achar até agora…

Obrigado

Att.
Leonardo Lima

7 Respostas

G

Olá leolimas!
Vou mostrar como fiz aqui pra vc aplicar no seu caso:

@Component
public class Imagens {

	private File pastaImagens;
	private ImagemDAO imagemDAO;

	public Imagens() {			  		 
		String pastaImagens = "/home/bruno/fotos";
		this.pastaImagens = new File(pastaImagens);   
		File destino = new File(pastaImagens);
		destino.mkdir();		
	}

	public Imagens(File pastaImagens) {
		this.pastaImagens = pastaImagens;
	}
	
	public void salva(UploadedFile imagem, Imovel imovel) {	
		File destino = new File(pastaImagens, imovel.getIdImovel() + ".imagem");
		try {
			IOUtils.copyLarge(imagem.getFile(), new FileOutputStream(destino));
		} catch (IOException e) {
			throw new RuntimeException("Erro ao copiar imagem", e);
		}
	}

Eu salvo fora da aplicação, é o melhor a fazer, criei a pasta fotos na minha Home e salvo lá.
Melhor ainda é salvar apenas o caminho da imagem no banco e depois recuperar esse caminho apontando pra imagem. Mas ai é outro papo, têm tópicos tratando do asusnto, mas os que eu vi não mostram código ou estão sem a solução.
Abraço!

L
hummm

legal, fiquei com duvida em um trecho

8.         String pastaImagens = “/home/bruno/fotos”;

9.         this.pastaImagens = new File(pastaImagens);

10.         File destino = new File(pastaImagens);

11.         destino.mkdir();

Aqui voce cria 2 objetos File com o mesmo path só para garantir que o dir exista é isso ?

Se o dir já existir o mkdir() não irá dar erro ? faz tempo que não mecho com Files em java rsrs

Eu queria deixar tudo na mesma pasta por comodismo mesmo, rsrs eu consegui chegar neste caminho
/media/Projetos/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/webTest/.

Só não consegui entender ainda o que é este .metadata/.plugins, se nao tivesse isso já era tava resolvido

G
Mas eu gostaria de saber se há alguma função para recuperar o caminho do projeto no workspace "/media/Projetos/workspace/webTest"

O correto é você injetar o HttpServletRequest e a partir dele obter o getRealPath. Você pode fazer algo assim:

public class MyController {
    private final HttpServletRequest request;

    public MyController(HttpServletRequest request) {
        this.request = request;
    }

    public void foo() {
        String thePath = request.getRealPath("/");
    }
}

Segue a documentação do método: http://java.sun.com/javaee/5/docs/api/javax/servlet/ServletRequest.html#getRealPath(java.lang.String)

Estou fazendo uma app de upload de imagens, mas só conseguir fazer o upload informando o caminho completo para a pasta que no meu caso atual é /media/Projetos/workspace/webTest/WebContent/uploads

Você está usando o componente padrão do Vraptor para upload de imagens?

G

Eu segui a apostila da Caelum, só que lá mostra como fazer para salvar a imagem dentro do contexto da aplicação, que é o que vc está fazendo, se vc quer salvar fora da aplicação é só fazer como eu fiz.
O makedir seria para criar a pasta mesmo, esse código converte o que seria uma String num File. Tô vendo ainda como salvar apenas o caminho no banco, isso é o ideal.
Abraço!

L

to usando deste jeito :

public void uploadFoto(UploadedFile Filedata) throws IOException {
		String path = "/media/Projetos/workspace/webTest/WebContent/uploads";


		File file = new File(path, Filedata.getFileName());
		InputStream stream = Filedata.getFile();
		try {
			file.createNewFile();
			IOUtils.copy(stream, new FileOutputStream(file));
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	}
L
garcia-jj:
Mas eu gostaria de saber se há alguma função para recuperar o caminho do projeto no workspace "/media/Projetos/workspace/webTest"

O correto é você injetar o HttpServletRequest e a partir dele obter o getRealPath. Você pode fazer algo assim:

public class MyController {
    private final HttpServletRequest request;

    public MyController(HttpServletRequest request) {
        this.request = request;
    }

    public void foo() {
        String thePath = request.getRealPath("/");
    }
}

Segue a documentação do método: http://java.sun.com/javaee/5/docs/api/javax/servlet/ServletRequest.html#getRealPath(java.lang.String)

Estou fazendo uma app de upload de imagens, mas só conseguir fazer o upload informando o caminho completo para a pasta que no meu caso atual é /media/Projetos/workspace/webTest/WebContent/uploads

Você está usando o componente padrão do Vraptor para upload de imagens?

Oi usando getRealPath("/") o resultado foi
/media/Projetos/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/webTest/

L

isso acontece pq qdo vc usa o plugin do eclipse pra subir sua aplicação no tomcat, ele faz o deploy nessa pasta interna do plugin…

se vc quiser que o getRealPath caia na pasta do seu workspace, terá que subir o tomcat (ou jetty, ou qqer outro servidor) manualmente, e apontar pra sua pasta WebContent

Criado 23 de abril de 2010
Ultima resposta 23 de abr. de 2010
Respostas 7
Participantes 4