Método para deletar imagem da pasta [Resolvido]  XML
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Autor Mensagem
Guevara
GUJ Master
[Avatar]

Membro desde: 24/02/2009 17:56:09
Mensagens: 1024
Offline

Oi pessoal!
Tenho a url das imagens no banco e preciso que ao deletar os dados do imóvel e das fotos, as imagens da pasta tb sejam deletadas:

O método que faz a remoção do imóvel é este:

O método deletar do componente:

O miolo ali no método deleta que eu não estou conseguindo fazer, já que a única coisa que é enviada para o método deleta é "imovel", precisaria na verdade das URL's das imagens que estão no banco, sendo que ao deletar o imóvel os dados na tabela foto tb são deletados automáticamente, ai fico sem o caminho para deletar as imagens que estão na pasta.
Tentei algo do tipo:

Obviamente não vai funcionar nunca, pois somente o imóvel é passado como parãmetro, faltando o resto.
Alguém pode dar uma dica?
Abraço!!

This message was edited 1 time. Last update was at 06/05/2010 16:27:43




Analista de Sistemas e desenvolvedor WEB
http://twitter.com/eguevara2012
[WWW]
igor_jua
JavaEvangelist
[Avatar]

Membro desde: 03/12/2008 14:44:31
Mensagens: 377
Offline

Não dá pra vc deletar primeiro as imagens da pasta e depois partir pra deleção no banco?
[MSN]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 8704
Offline

deleta a imagem primeiro, e deixa um getter dentro do Imovel pra pegar o File da imagem ... não precisa estar no banco...

--
Caelum
www.caelum.com.br

Livro sobre VRaptor, da Casa do Código:http://www.casadocodigo.com.br/products/livro-vraptor


garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2822
Localização: Porto Alegre
Offline

Lucas Cavalcanti wrote:deleta a imagem primeiro, e deixa um getter dentro do Imovel pra pegar o File da imagem ... não precisa estar no banco...


Embora eu nunca trabalhe com acesso ao filesystem, acho errado você excluir primeiro a imagem do filesystem e depois do banco. Afinal, se der algum problema na base você faz rollback na base e o registor continua lá, porém a imagem já foi excluída do filesystem, e assim você fica com a base de dados quebrada.

Se você excluir primeiro o registro no banco e depois a imagem no filesystem, caso der erro ao excluir o registro a imagem e o registro permanecem no banco e integros. E se der erro ao excluir a mensagem, a transação não será efetivada (desde que você trate) e o registro permanecerá lá no banco, assim como a imagem.

No caso do problema do colega Guevara, você deve primeiro armazenar em alguma variável os dados da imagem que você quer apagar, depois excluir o registro. Se você não entender, me avise.

This message was edited 1 time. Last update was at 04/05/2010 22:54:45


http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
Guevara
GUJ Master
[Avatar]

Membro desde: 24/02/2009 17:56:09
Mensagens: 1024
Offline

Oi pessoal!
Lucas, o problema que eu estou encontrando é como implementar esse método de remoção, quanto a ordem de remoção isso poderia ser tratado numa estrutura try/catch checando se a id do imovel bate com a fk do imovel na tabela Foto e se estiver no banco mandar deletar tanto da pasta como do banco.
Algo do tipo:

Mas preciso do método "deleta" lá no componente Imagens. =/
Se alguém, tiver uma idéia melhor do que essa agradeço a colaboração. =)
Garcia, para resolver esse ponto que vc citou a estrutura que eu montei logo acima não resolveria?
O que mais me preocupa é o método pra deletar, pois preciso deletar todas as imagens com a id do imóvel, sendo que para o componente Imagens só é passado o parâmetro imóvel. =/
Abraço!!



Analista de Sistemas e desenvolvedor WEB
http://twitter.com/eguevara2012
[WWW]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 8704
Offline

se o Imagens é um @Component é só receber o dao de imagens no construtor

--
Caelum
www.caelum.com.br

Livro sobre VRaptor, da Casa do Código:http://www.casadocodigo.com.br/products/livro-vraptor


Guevara
GUJ Master
[Avatar]

Membro desde: 24/02/2009 17:56:09
Mensagens: 1024
Offline

Pois é Lucas, eu fiz isso, só têm um probleminha na FotoDAO, é que para recuperar a url das fotos a ID do imovel é uma FK, não posso pegar usando esta criteria:

Precisaria de um:

Conseguindo montar essa criteria mandaria o resultado para o componente injetando no construtor e o método deleta teóricamente funcionaria, permitindo assim o método "remove" do ImovelController funcionar tb.
Estou no caminho certo ou existe outra forma de fazer isto?



Analista de Sistemas e desenvolvedor WEB
http://twitter.com/eguevara2012
[WWW]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 8704
Offline

Vc tem um relacionamento configurado com @ManyToOne ou @OneToOne?

se sim, vc pode fazer a restriction:


ou trocar tudo pra HQL (que eu acho mais fácil e melhor)

--
Caelum
www.caelum.com.br

Livro sobre VRaptor, da Casa do Código:http://www.casadocodigo.com.br/products/livro-vraptor


Guevara
GUJ Master
[Avatar]

Membro desde: 24/02/2009 17:56:09
Mensagens: 1024
Offline

Não deu boa Lucas. =/
O método de listar está retornando null pro FotoDAO, ai fiz de uma forma diferente, carrego um objeto foto e mando para o componente:

No componente extraio a url e armazeno numa variável "caminho":

Agora, pra isso funcionar preciso carregar um objeto foto pela fk e não pela id de foto e sim pelo id de imóvel:

Parece que se esse método "carrega" funcionar, o resto vai funcionar. =)

This message was edited 1 time. Last update was at 05/05/2010 16:34:54




Analista de Sistemas e desenvolvedor WEB
http://twitter.com/eguevara2012
[WWW]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 8704
Offline

ussa isso no seu método carrega:


vc só precisa do relacionamento configurado

--
Caelum
www.caelum.com.br

Livro sobre VRaptor, da Casa do Código:http://www.casadocodigo.com.br/products/livro-vraptor


Guevara
GUJ Master
[Avatar]

Membro desde: 24/02/2009 17:56:09
Mensagens: 1024
Offline

Deu certo Lucas, mas com esse parâmetro .uniqueResult(); só apaga uma foto da pasta? E se tiver mais fotos lá?
Não pude testar isso pq o displaytag tá listando errado, tenho um imóvel com três fotos, no banco está correto e na pasta tb, mas na hora de listar o displaytag tá listando três imóveis, quando na verdade existe apenas um. Creio que seja pelo fato de estar pegando as fotos junto, ai ele entende três imóveis. =/



Analista de Sistemas e desenvolvedor WEB
http://twitter.com/eguevara2012
[WWW]
Lucas Cavalcanti
GUJ Hacker
[Avatar]

Membro desde: 08/07/2007 00:08:14
Mensagens: 8704
Offline

se um imóvel tem várias fotos é só trocar uniqueResult() por list() e apagar todas

--
Caelum
www.caelum.com.br

Livro sobre VRaptor, da Casa do Código:http://www.casadocodigo.com.br/products/livro-vraptor


Guevara
GUJ Master
[Avatar]

Membro desde: 24/02/2009 17:56:09
Mensagens: 1024
Offline

Lucas, o método só consegue apagar um imagem:

Esse método que vc passou vou aproveitar para deletar uma imagem apenas, mas para deletar todas preciso de todas as url's de foto do imóvel, fiz as alterações:


Agora, no método deleta lascou:

O "caminho" não pode ser instanciado sendo que ele agora é uma Lista de url. =/



Analista de Sistemas e desenvolvedor WEB
http://twitter.com/eguevara2012
[WWW]
garcia-jj
JWizard

Membro desde: 13/04/2009 22:11:50
Mensagens: 2822
Localização: Porto Alegre
Offline

Guevara wrote:Agora, no método deleta lascou:

O "caminho" não pode ser instanciado sendo que ele agora é uma Lista de url. =/



http://github.com/garcia-jj
Não respondo dúvidas via MP. Use o fórum.
Guevara
GUJ Master
[Avatar]

Membro desde: 24/02/2009 17:56:09
Mensagens: 1024
Offline

Oi Garcia!
Na linha:

Está mandando renomear o caminho para tipo Foto:

Se renomear dá zica na linha para instanciar o caminho.



Analista de Sistemas e desenvolvedor WEB
http://twitter.com/eguevara2012
[WWW]
 
Índice dos Fóruns » Frameworks e Bibliotecas brasileiros
Ir para:   
Powered by JForum 2.1.8 © JForum Team