Salvar imagem na aplicação com JSF

12 respostas
D

Pessoal,

Estou começando a desenvolver utilizando JSF e Primefaces e estou agora brincando um pouco com o fileUpload…
Eu to conseguindo fazer o upload e mostrar a imagem na tela, agora eu to tentando pegar essa imagem e gravar em uma pasta dentro da aplicação… O caminho da pasta é WebContent\images

Dei uma pesquisada, mas confesso que não consegui um exemplo proximo ou que seja o que eu to procurando…

Será que alguém poderia me dar um help, indicar algum material?

Obrigada

12 Respostas

S

Olá,

Dá uma olhada nos comentários desse link:

http://quebrandoparadigmas.com/?p=425

No post o autor ensina a salvar uma foto dentro do banco de dados, e nos comentários ele ensina a salvar dentro de uma pasta da aplicação, utilizando o Primefaces.

Abs,
Salomão Neto

D

Salomao,

Primeiramente obrigada por responder…

Eu encontrei esse site semana passada e comecei a estudar jsf com primefaces por ele… É um pai esse site.rs…

Vou dar uma estudada nesse exemplo e dps posto o resultado…

Obrigada e Beijos!

D

Salomao…

Eu estava estudando o tutorial que você me passou e me surgiu uma dúvida:
Qual é a melhor forma para eu guardar as minhas imagens: via banco ou na pasta da aplicação mesmo?

Obrigada

S

Olá,

Também estou com essa dúvida … :slight_smile:

Pelo que pesquisei a respeito a maioria dos desenvolvedores considera que o melhor é salvar numa pasta e colocar o caminho numa tabela do banco de dados. A idéia é que tudo que é “estático” e que não for participar de pesquisas não precisa ficar no banco… Por exemplo, você não vai fazer alterações numa imagem, provavelmente no máximo vai apagá-la ou substituí-la por outra… Também não vai pesquisar em cima do conteúdo do arquivo binário…

Todos os dois métodos tem prós e contras.

Por exemplo, salvar no banco de dados facilita muito a manipulação do arquivo, mas gera um overhead de processamento (pois para colocar o arquivo no banco você vai ter quer convertê-lo em um vetor de bytes e toda vez que for recuperá-lo você vai ter que pegar o vetor de bytes e transformar em arquivo novamente) e o aumento do tamanho do arquivo do banco de dados (para fins de teste criei um banco no Firebird com cerca de 2000 fotos de cerca de 700KB cada, e o mesmo ficou com 1.71GB. Imagina se for colocar arquivos grandes, como relatórios do Word ou Projetos em CAD…).

Colocar o arquivo no banco também dá mais segurança, pois numa pasta alguém pode ficar fuçando ou apagar acidentalmente, ou você pode pegar um vírus que contamine o tipo de arquivo que sua aplicação armazena, por exemplo…

Já salvar numa pasta deixa a aplicação bem mais leve, visto que não vai precisar ficar fazendo conversão de bytes e o banco fica muitíssimo menor. Porém, dá mais trabalho de implementar, pois você vai ter que ficar se preocupando com manipulação de arquivos e diretórios, coisa que o banco iria fazer por você.

O que mais me preocupa em salvar numa pasta é o maior risco de ocorrer uma inconsistência, pois você precisa realizar uma inserção dos dados do arquivo no banco e salvar o arquivo no disco, já pensou se o servidor cae antes de salvar o arquivo no disco… ou se você salva o arquivo no disco e ocorre um erro de conexão com o banco antes de inserir as informações sobre ele. Já salvando o arquivo no banco isso não iria ocorrer…

Eu gostaria mesmo de salvar no banco… mas estou inclinado a salvar numa pasta por causa do overhead, pois também vou trabalhar com galerias de fotos, já pensou vários usuários conectados, cada um abrindo uma galeria diferente…

Bom, espero que eu tenha te ajudado e não confundido :wink: … Agora seria bom se os usuários que salvam arquivo no banco se manifestassem com os prós e contras…

Abs,
Salomão

D

Meu cenário é igual a esse do tópico, dsystem.
Você conseguiu gravar a imagem em arquivo? Eu tava guardando no banco, mas o Primefaces tem um problema sério com esse negócio de imagem com StreamedContent

D

Olá Diogo tudo bem?

Então na verdade eu tentei, procurei… mas tudo o que encontrei salva em pastas dentro do build, ou seja, sem vantagem alguma…

Mas ainda estou na busca. Caso eu encontre alguma coisa, eu te aviso :wink:

Bjs!

D

Achei esse tópico aqui e to tentando http://www.guj.com.br/java/241990-salvar-arquivo-diretorio-aplicacao. Qualquer coisa, se conseguir primeiro, me avisa. =)

S

Diogo,

Eu também estou implementando um projeto em que vou precisar salvar arquivos, como falei acima acabei decidindo salvar os arquivos numa pasta para evitar o overhead e o “inchaço” do tamanho do arquivo do banco, só que ainda não cheguei nessa parte…

Mas dá uma olhada nesse link, no post ele explica como salvar uma imagem no banco de dados e nos comentários ele explica como salvar em um diretório, usando o PrimeFaces.

http://benignosales.wordpress.com/2010/11/05/jsf-2-0-primefaces-crud-com-foto-utilizando-pfileupload/

Espero que ajude!

Abs,
Salomão

D

Salomão, então…

Eu vi esse tópico, mas o problema é que ele salva no build… E aí ja sabe. Deu um build/clean, já era.rs

Precisa encontrar uma forma de salvar na pasta da propria aplicação…

=/

R

dsystem:
Salomão, então…

Eu vi esse tópico, mas o problema é que ele salva no build… E aí ja sabe. Deu um build/clean, já era.rs

Precisa encontrar uma forma de salvar na pasta da propria aplicação…

=/

m

Uma possivel solução:Salvar a imagem em algum diretório na máquina do cliente,armazenar no banco o caminho dessa imagem,e depois copiar a imagem do diretório local para o servidor de aplicação.

S

dsystem,

Acho que o “build/clean” só tem enquanto você está desenvolvendo, quando você colocar o sistema em produção não vai mais ter a pasta build e você também não vai poder dar um “build/clean” no seu projeto, aí os arquivos vão se manter.

Experimenta implantar o arquivo *.war gerado na pasta dist diretamente no seu servidor (sem usar IDE) e faz os testes.

Abs,
Salomão

A

Estou tendo as mesmas dificuldades que vocês, alguem conseguiu implementar o salvamento/leitura de imagens/arquivos fora do contexto da aplicação ou do tomcat?

Criado 30 de junho de 2011
Ultima resposta 14 de set. de 2011
Respostas 12
Participantes 5