Upload de imagens não funciona como o esperado

Bom dia a todos(as). Sei que é chato esse lance de ficar repetindo tópicos, mas eu já li diversos e nenhum sanou minha dúvida por completo. A minha questão é a mesma, fazer upload de uma imagem. Vou descrever abaixo as minhas classes e explicar o q está acontecendo.

Requisito: Um administrador pode ter uma imagem. Existindo ela deve ser exibida no seu cadastro.

A partir de alguns tópicos do guj, montei minhas classes da seguinte forma:

Classe Responsável pelos uploads

public class UploadArquivo {
	
	private String caminho; 
	private byte[] arquivo; 
	private String nome;  

	public String getNome() { 
		return nome; 
	} 

	public String getRealPath() { 

		FacesContext facesContext = FacesContext.getCurrentInstance(); 
		ServletContext context = (ServletContext) facesContext.getExternalContext().getContext(); 
		
		return context.getRealPath("/");
		
	} 

	public void fileUpload(UploadedFile upload, String type, String diretorio) { 
		
		try { 
			
			String nomeArquivo = upload.getFileName() + new java.util.Date().getTime();
			
			this.nome = ApiSaaSUtilitario.toMd5(nomeArquivo) + type; 
			this.caminho = getRealPath() + File.separator + diretorio; 
			this.arquivo = upload.getContents(); 

			File file = new File(this.caminho); 
			file.mkdirs();
			

		} catch (Exception ex) { 
			// TODO Gravar exceções em um LOG
			System.out.println("Erro no upload do arquivo" + ex);
			
		}
		
	} 

	public void gravar(){ 

		try { 

			FileOutputStream fos; 
			fos = new FileOutputStream(this.caminho + File.separator + getNome()); 
			fos.write(this.arquivo);
			fos.flush();
			fos.close(); 

		} catch (Exception ex) { 
			// TODO Gravar exceções em um LOG			
			System.out.println(ex); 
		} 

	}	    

}

Código de envio:

UploadArquivo uploadArquivo = new UploadArquivo()
uploadArquivo.fileUpload(this.imagem, ".png", "\\WebContent\\resources\\upload");
uploadArquivo.gravar();

Resultado: As imagens estão sendo gravadas em D:\Projetos\WorkspaceJava.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SkyMedic\WebContent\resources\upload, sendo que deveria gravar em D:\Projetos\WorkspaceJava\SkyMedic\WebContent\resources\upload para que o componente de exibição de imagens reconheça

Como faço pra gravar na pasta que eu quero? Sendo que quando eu colocar o sistema em produção, esse caminho deverá ser obtido dinamicamente?

Espero ter sido claro…

eu faço assim

e apenas coloco

/resources/upload/ - não precisa colocar WebContent

no meu caso eu salvo as imagens na pasta da aplicação e não no banco
mas qdo dou um novo deploy as imagens são apagadas
o que eu andei pesquisando para não perder essas imagens
é salva-la no docroot, mas ainda nao testei

Vou fazer o teste agora e posto o resultado…obrigado

Fiz as modificações sugeridas e o caminho retornado foi D:\Projetos\WorkspaceJava.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SkyMedic/resources/upload

Ainda não resolve meu problema. O componente de exibição de imagem não exibe as imagens gravadas nesse caminho.

Para uma imagem ser exibida no meu projeto, eu tenho que colocar na pasta upload do projeto que está em D:\Projetos\WorkspaceJava\SkyMedic\WebContent\resources\upload

[quote=igorthurler]Fiz as modificações sugeridas e o caminho retornado foi D:\Projetos\WorkspaceJava.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SkyMedic/resources/upload

Ainda não resolve meu problema. O componente de exibição de imagem não exibe as imagens gravadas nesse caminho.

Para uma imagem ser exibida no meu projeto, eu tenho que colocar na pasta upload do projeto que está em D:\Projetos\WorkspaceJava\SkyMedic\WebContent\resources\upload[/quote]

mude para isso

[code]public String getRealPath() {
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
FacesContext aFacesContext = FacesContext.getCurrentInstance();
ServletContext context = (ServletContext) aFacesContext.getExternalContext().getContext();

     return context.getRealPath("//");[/code]