Oque e melhor? Upload de Imagem para BD e guardar num campo BLOB ou guardar URL no VARCHAR?

8 respostas
acmprotector

Alow pessoal. Eu tenho algumas duvidas em relacao ao assunto.

Eu estou a desenvolver um site de forum, mais surgem muitas duvidas como:
1-Fazer upload de imagem e guardar num campo Blob na BD ou guardar a imagem num directorio e url da imagem na BD no VARCHAR?
2-Como eu valido tipos de ficheiro a fazer upload? Sendo se eu quiser somente fazer upload de imagem?

Eu notei que se usar o conceito de guadar URL da imagem pode gerar complicacoes como por exemplo:
1- Se tiver imagem com o mesmo nome ele faz overwrite.

Valew

8 Respostas

Y

Eu levaria em conta a seguinte questão: E se por algum motivo for excluído o arquivo da URL? Se isso for um grande problema grave em um Blob

acmprotector

É um problema, mais que possa ser controlado pelo o adminstrador, enquanto que upload de imagem com o mesmo nome é pouco complicado.

Para o caso de:

A minha ideia seria aplicar um pequeno algoritmo para renomear o nome da imagem, assim guardaria no BD o ficheiro com o nome fisico(nome original) e nome logico(atribuido pela aplicacao) e faria um mapeamento, assim todos o ficheiro que guardaria no directoria seria com o nome logico para garantir que nao haja ficheiro como nomes iguais e o mesmo ficheiro seria mostrado na aplicacao web com o nome fisico(original).

diego_qmota

Sempre tive essa questão sem resposta… mas agora o que me recomendam sempre é guardar a imagem separada do banco.
Você pode fazer conforme acmprotector indicou.
Imagina quando a tabela ficar grande… milhares de arquivos de imagem compactados nos registros (que mer#@ que vai ser)…
Imagine o tamanho que vai ficar essa tabela, a sobrecarga para ler e percorrer os registros…

Melhor usar a tabela como um “INDEX” da imagem. Você salva um registro na tabela, mas que contém o endereço exato para a sua imagem. Não precisa nem varrer o diretório de imagens…você já sabe onde a imagem está. Se pensarmos assim, vemos que é a melhor solução.

maior_abandonado

eu também não gosto muito de manter bytes de uma forma geral no banco por que isso costuma ser relativamente grande e será trafegado na rede… ainda que muitas vezes na mesma rede interna estão tanto o servidor de DB quando o de aplicação, ainda assim considero inconveniente…

rodrigocolasso

Concordo com os amigos, acho que colocar bytes no banco não é uma boa ideia, se você pensa em ter um sistema grande … imagine para fazer backup diário de seu banco ?

Sempre utilizo os arquivos e guardo as informações de diretório no banco, quanto ao problema de sobrepor imagens de mesmo nome é só colocar um hash pela data quando for fazer o upload da imagem (uma dica)…

acmprotector

Vou tentar implementar essa sua ideia, parece ser simples e poupa menos tempo.

Concordo com isso.

Ataxexe

Tome cuidado também se o seu sistema rodar em um cluster. Já vi muitos casos em que o responsável pela implementação do upload se esquece desse detalhe e o arquivo somente fica visível para um dos nós do cluster.

acmprotector

Valew pelo Warning!

Criado 1 de agosto de 2011
Ultima resposta 2 de ago. de 2011
Respostas 8
Participantes 6