Cara consegui, vou te mandar como que ta o meu codigo.
Só tem 2 detalhes:
1-Toda vez que voce fizer o deploy do projeto ele vai limpar a pasta de upload, entao teria que fazer um backup antes de dar depoy, e por de volta depois. Mais pra frente vou fazer um esquema que nao coloque dentro da pasta do site as imagens, ai ele nao exclui os uploads a cada deploy.
2-Se voce tiver usando o netbeans pra testar, não use. aqui eu estava usando e dava problema pois ele configurava a pasta do site na pasta dos projetos do netbeans. o que eu fiz foi ao inves de testar pelo netbeans, foi compilar o .war do site, jogar o .war na pasta webapps do tomcat, e fazer o deploy manualmente pelo tomcat manager.
Segue os codigos como prometido:
método do managedBean pra recuperar as fotos do upload:
public List<String> getImagens(){
FacesContext facesContext = FacesContext.getCurrentInstance();
ServletContext scontext = (ServletContext) facesContext.getExternalContext().getContext();
// File pastaImagensTopo = new File(scontext.getRealPath("/WEB-INF/imagensTopo/"));
File pastaImagensTopo = new File(scontext.getRealPath("/uploads/imagensTopo/"));
if(!pastaImagensTopo.exists())pastaImagensTopo.mkdirs();
File[] arquivos = pastaImagensTopo.listFiles();
ArrayList imagens=new ArrayList();
for(File arquivo : arquivos){
if(arquivo.isFile()){
String ext=arquivo.getName().substring(arquivo.getName().lastIndexOf(".")).toLowerCase();
if(ext.equals(".jpg")||ext.equals(".jpeg")||ext.equals(".bmp")||ext.equals(".gif")||ext.equals(".png")){
imagens.add("/uploads/imagensTopo/"+arquivo.getName());
}
}
}
return imagens ;
}
método do managedBean pra fazer o upload:
public void upload(FileUploadEvent event) {
FacesMessage msg = new FacesMessage(event.getFile().getFileName() + " foi enviado com sucesso.");
FacesContext.getCurrentInstance().addMessage(null, msg);
// Do what you want with the file
try {
byte[] foto = event.getFile().getContents();
String nomeArquivo = event.getFile().getFileName();
FacesContext facesContext = FacesContext.getCurrentInstance();
ServletContext scontext = (ServletContext) facesContext.getExternalContext().getContext();
String arquivo = scontext.getRealPath("/uploads/imagensTopo/" + nomeArquivo);
// String arquivo = scontext.getContextPath()+"/uploadis/" + nomeArquivo;
File f=new File(arquivo);
if(!f.getParentFile().exists())f.getParentFile().mkdirs();
if(!f.exists())f.createNewFile();
System.out.println(f.getAbsolutePath());
FileOutputStream fos=new FileOutputStream(arquivo);
fos.write(foto);
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Pagina de upload:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form enctype="multipart/form-data">
<p:fileUpload fileUploadListener="#{fileUploadController.upload}"
mode="advanced"
update="messages"
sizeLimit="5000000"
allowTypes="/(\.|\/)(gif|jpe?g|png|pdf)$/"/>
<p:growl id="messages" showDetail="true"/>
</h:form>
</h:body>
</html>
Pagina que mostra a galleria das imagens upadas(tem uma tabela em cima que mostra os caminhos das imagens mas ignora aquilo, tinha feito so pra teste mesmo):
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:composition template="/templates/template.xhtml">
<ui:define name="titulo">Eventos - ACCI</ui:define>
<ui:define name="conteudo">
<p:growl id="aviso" autoUpdate="true" />
Caminho das imagem hahaha:<br/>
#{imagensTopo.caminho}
<f:view>
<h:form>
<p:dataTable value="#{imagensTopo.imagens}" var="item">
<p:column>
<f:facet name="header">
<h:outputText value="Código" />
</f:facet>
<h:outputText value="#{item}" />
</p:column>
</p:dataTable>
</h:form>
</f:view>
<p:galleria value="#{imagensTopo.imagens}" var="imagem" >
<p:graphicImage value="#{imagem}"/>
</p:galleria>
</ui:define>
</ui:composition>
</html>
Eh isso ai, comenta ai se deu certo ou se nao deu algum problema… talvez eu consiga te ajudar.