Upload Imagen dentro diretório aplicação

Alguém teria algum exemplo de como fazer o upload de um arquivo dentro do diretório da aplicação web? No caso estou usando o maven.

Meu problema principal é quando vou salvar a imagem no diretório, pois diz que o mesmo não foi encontrado ou não existe, sendo que ele foi criado.

É que, para aplicações web, você nunca pode usar o caminho absoluto, sempre use caminho relativo.
Posta o código e vamos tentar resolver.

public void oncapture(CaptureEvent captureEvent) {
    filename = getRandomImageName();
    byte[] data = captureEvent.getData();

    ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
    String newFileName = externalContext.getRealPath("") + File.separator + "resources" + File.separator + "demo" +
                                File.separator + "images" + File.separator + filename + ".jpeg";
	
	FileImageOutputStream imageOutput;
	try {
		imageOutput = new FileImageOutputStream(new File(newFileName));
		imageOutput.write(data, 0, data.length);
		imageOutput.close();
	}
    catch(IOException e) {
		throw new FacesException("Error in writing captured image.", e);
	}
}

No momento que vai carregar no FileImageoutputStream, exibe o erro dizendo que o diretório não existe ou que não pode ser encontrado. Só que existe sim.

Minha aplicação está sendo feita em JSF usando o Mavem.

E como está a estrutura de diretórios?

Você copiou o código todo do showcase, por isso não vai dar certo…

Você nao tem a pasta “demo”

A confusão vai além disso.
Ele está considerando que a pasta resources, do maven (src/main/resources) é a pasta resources que o faces referencia.
Na verdade, será preciso criar uma pasta resources dentro de src/main/webapp para que isso funcione.
Dentro dela, aí sim, a estrutura que você vai utilizar.

Não funciona referenciando a pasta /src/main/resoucres/images/ no caso tem de ser dentro da pasta webapp mesmo?

Cara, o faces é chato com essa questão.
E, até onde me lembro, não funciona, pois o que o faces enxerga é o mundo dentro do webapp (WebContent em projetos web dinâmicos).

1 curtida

Então é isso. Grato pela ajuda.

Não sei qual é a finalidade, mas salvar arquivo dentro da pasta da aplicação pode não ser uma boa ideia. Está ciente de que se fizer o redeploy os arquivos vão sumir?

1 curtida

Usando este código busco arquivos dentro do diretório “src/main/resources/…” será que te ajuda?

URL url = this.getClass().getResource("/pasta/arquivo.formato")

Abraço!