Oi
Eu estou desenvolvendo um projeto web usando prime faces e estou com a seguinte dificuldade.
Eu quero fazer o upload de uma imagem e salvar ela em disco em uma pasta temporária para ser acessada pela minha página
por exemplo (http://localhost:8084/webApp/tmp/imagem.jpg)
Com o código que eu fiz até agora eu consegui salvar a imagem em disco passando um endereço no disco local mas quando eu salvo no contexto do projeto para ser acessada pela página não funciona.
Quando eu salvo
“D:\imagem.jpg” - Funciona
“/imagem.jpg” ou “./imagem.jpg” - Não Funciona
SEVERE: null
java.io.FileNotFoundException: .\tmp\Tulips.jpg (O sistema não pode encontrar o caminho especificado)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
at kprojects.clickentregas.controle.bean.IndexBean.uploadLogo(IndexBean.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.el.parser.AstValue.invoke(AstValue.java:191)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:98)
at org.primefaces.component.fileupload.FileUpload.broadcast(FileUpload.java:238)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:740)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:943)
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
at java.lang.Thread.run(Thread.java:619)
Estou dizendo isso porque ele cria pastas diferentes para códigos (src/java) e imagens (src/resources). Quando vc faz o deploy no TOMCAT a pasta RESOURCES foi para dentro de classes (WEB-INF/classes/). Confesso que eu pensei que ficasse fora da pasta classes (em WEB-INF)
Tem como mudar o local da pasta RESOURCES no WAR ?? Por exemplo, os resources ficar somente em WEB-INF e não em WEB-INF/classes.
Eu tenho um tópico nesse link abaixo e ninguém até agora deu noticias, será que tu pode dar uma olhada pra mim fera? É coisa bem pequena. Ta tudo funcionando, o código ta prontinho so tem um pequeno detalhe.
Estou salvando corretamente, visualizando as imagens salvas também…
o problema é que ao salvar dentro do contexto, como estou em um ambiente teste(na minha própria máquina) qualquer alteração que eu faça tenho que dar full publish no jboss pras alterações funcionarem. Quando faço isso, perco as imagens que eu salvei dentro do contexto do projeto…
Tem como sanar este problema!?
Está aqui um ótimo tutorial pra quem tiver problema com este tipo de upload dentro do contexto do projeto.
quanto ao mostrar as imagens apenas setei o mesmo caminho no qual salvei dentro do value do p:graphicImage
Acredito que só fazendo backup das imagens e depois colocando elas de volta, mas é um trabalho bem chato e extremamente não recomendável.
Salve fora do contexto do projeto. Se nos testes está tendo problema, imagina em produção…
[quote=ErickRAR]Acredito que só fazendo backup das imagens e depois colocando elas de volta, mas é um trabalho bem chato e extremamente não recomendável.
Salve fora do contexto do projeto. Se nos testes está tendo problema, imagina em produção…[/quote]
Mas como vou jogar esse caminho dentro do p:graphicImage para mostra-la?
Salve fora do contexto ou em um servidor de imagens e guarde o caminho/link no banco de dados. quando for mostrar ,basta recuperar o caminho pelo banco de dados.
Se quiser um outro servidor, na Amazon para hospedar arquivos no S3 é ridiculamente barato e a API deles é bem fácil de utilizar.
[quote=ErickRAR]Salve fora do contexto ou em um servidor de imagens e guarde o caminho/link no banco de dados. quando for mostrar ,basta recuperar o caminho pelo banco de dados.
Se quiser um outro servidor, na Amazon para hospedar arquivos no S3 é ridiculamente barato e a API deles é bem fácil de utilizar.[/quote]
Mesmo sendo fora do contexto eu buscando esse caminho e jogando a variável o sistema reconhecerá o caminho corretamente?
Pensei em fazer dessa forma, mas não sabia se daria certo.
[quote=ErickRAR]Salve fora do contexto ou em um servidor de imagens e guarde o caminho/link no banco de dados. quando for mostrar ,basta recuperar o caminho pelo banco de dados.
Se quiser um outro servidor, na Amazon para hospedar arquivos no S3 é ridiculamente barato e a API deles é bem fácil de utilizar.[/quote]
no banco o caminho está salvo dessa forma
ID; NOME; OID; DIRETORIO;
56;“cozinha 01.jpg”;56596;“C:\Desenvolvimento\projetos\HUAP-Endometriose\exames-imagem”
mostra que tem um resultado do banco porém não mostra a imagem…