Consegui enviar uma imagem do JSF
para o banco de dados MySQL
usando uma tabela com campo Blob
, gostaria de saber uma forma de pegar de volta essa imagem e posta-la em uma page JSF
usando o campo h:graphicImage
.
Pagina JSF
<h:form enctype="multipart/form-data">
<h:panelGrid columns="3">
<h:outputLabel value="Arquivo" for="arquivo" />
<h:inputFile id="arquivo" required="true"
value="#{uploadFileBean.arquivo}"
requiredMessage="Informe o arquivo" />
<h:message for="arquivo" />
<h:graphicImage></h:graphicImage>
<h:commandButton action="#{uploadFileBean.upload}"
value="Upload enviar">
<f:ajax execute="@form" render="@form" />
</h:commandButton>
</h:panelGrid>
</h:form>
1 curtida
método de upload no @Controller
public void upload() throws IOException {
System.out.println(arquivo.getSubmittedFileName());
byte[] arquivoByte = toByteArrayUsingJava(arquivo.getInputStream());
uploadArquivo.setDescricao(arquivo.getSubmittedFileName());
uploadArquivo.setArquivo(arquivoByte);
uploadArquivoService.save(uploadArquivo);
uploadArquivo = new UploadFile();
arquivo = null;
}
1 curtida
Valeu Abner, eu já havia visto estes tópicos antes, não estou utilizando Primefaces em meu projeto, por tanto acredito que os procedimentos devem mudar um pouco, estou usando apenas JSF e gostaria de saber como funciona a tag h:graphicImage buscando do banco Mysql
Mike
Janeiro 24, 2019, 1:22pm
#5
A tag h:graphicImage aponta para o contexto do projeto, então a imagem teria que estar em resources.
Eu tentaria usar a tag img, mas como você salvou a imagem no banco e não o caminho, não sei como vc faria utilizando ela
Eu não sei como funciona a leitura de uma imagem no banco (eu sempre salvo o caminho), mas o graphicImage do OmniFaces aceita InputString e byte[]
http://showcase.omnifaces.org/components/graphicImage
O OmniFaces é bem leve, se você quiser coloca-lo no projeto para ver o que da…
1 curtida
Grande Mike, blz? estou utilizando a implementação do mojarra, sera que se comporta da mesma forma?
Mike
Janeiro 24, 2019, 1:36pm
#7
Alexsandro_Andrade:
Grande Mike, blz?
Opa, blz e você?
Eu não encontrei em nenhum lugar falando que eles desenvolveram utilizando Mojarra ou Myfaces, mas o Mojarra é a implementação padrão e a mais usada do JSF, então deve funcionar.
Os requerimentos de acordo com o proprio OmniFaces são esses:
An important design goal will be to have as few dependencies as possible and to be minimally invasive.
OmniFaces 3.x requires Java 1.8, JSF 2.3, EL 3.0, Servlet 3.1, CDI 2.0, WS 1.1
OmniFaces 2.x requires Java 1.7, JSF 2.2, EL 2.2, Servlet 3.0, CDI 1.1, WS 1.1
OmniFaces 1.x requires Java 1.6, JSF 2.0, EL 2.1, Servlet 2.5
For users who are still on JSF 2.2, use 2.7 instead.
1 curtida
Mike:
Opa, blz e você?
Tudo ótimo!
sendo assim, no meu jsf eu devo apontar no meu <h:graphicImage value=""/> um objeto do tipo InputString ?
Mike
Janeiro 24, 2019, 1:56pm
#9
Seria um <o:graphicImage /> que é o graphicImage do OmniFaces e no value você passa o inputStream ou byte[]
Entendi, mas no meu caso vou tentar com o h:graphicImage, vou ver se funciona, como eu conseigo transformar um byte[] arquivo em um inputStream?
Mike
Janeiro 24, 2019, 2:19pm
#11
h:graphicImage eu não sei se funciona com inputStream, que eu saiba funciona apenas com imagens salva em resources
Mike:
o:graphicImage
caso eu use o:graphicImage, como eu conseigo transformar um byte[] arquivo em um inputStream?
Mike
Janeiro 24, 2019, 3:36pm
#13
Assim:
byte[] byteArray = new byte[] { 0xC, 0xA, 0xF, 0xE };
InputStream is = new ByteArrayInputStream(byteArray);
1 curtida
private InputStream is;
public InputStream getIs() {
return is;
}
public void setIs(InputStream is) {
this.is = is;
}
public void findImagebyId() {
UploadFile up = uploadArquivoService.findById(3);
is= new ByteArrayInputStream(up.getArquivo());
}
estou tentando assim, mas nao da certo
Mike
Janeiro 24, 2019, 4:49pm
#16
a unica dependencia que preciso por é essa? ou tem outra?
<!-- https://mvnrepository.com/artifact/org.omnifaces/omnifaces -->
<dependency>
<groupId>org.omnifaces</groupId>
<artifactId>omnifaces</artifactId>
<version>2.7</version>
</dependency>
Mike
Janeiro 24, 2019, 5:41pm
#19
Que eu saiba precisa de CDI, mas o Wildfly ja vem com ele
OmniFaces 2.x requires Java 1.7, JSF 2.2, EL 2.2, Servlet 3.0, CDI 1.1, WS 1.1
Eu não to podendo olhar exception agora
1 curtida
Mike, pelo que li se torna mais facil pelo primefaces fazer esse procedimento, como voce disse
baixei a biblioteca do primefaces
<p:graphicImage></p:graphicImage>
no value="" eu devo apontar para um objeto do tipo InputStream é isso?