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();
}
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/");
}
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.
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 " );???
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");
}
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…
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…
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");
}
}