Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Imagens no MySQL


Como dito antes, blob é o caminho a seguir, no entanto, como SanHolo aponta, não é realmente em termos de desempenho e você eventualmente terá problemas, pois seu banco de dados pode crescer muito, muito rápido!

Por que você não indexa o nome do arquivo no banco de dados e armazena o arquivo no servidor ?

A principal razão para não permitir algo assim seria problemas de segurança. Se você está realmente tentando cobrir suas bases, não permitindo que todos os usuários vejam ou peguem conteúdo, você tem duas opções.

Opção A) dê ao arquivo um nome único e não identificável como o Flickr faz. O nome do arquivo compreende dois hashes. Um hash de usuário e um hash de arquivo. O segundo hash é secreto e a única maneira de obtê-lo seria por tentativa e erro. Dê uma olhada em este arquivo que tenho no Flickr . É protegido pelo usuário (somente a família pode ver), mas você poderá acessá-lo muito bem, pois o próprio URL serve como proteção:http://farm2.static.flickr.com/1399/862145282_bf83f25865_b.jpg , mesmo se você estivesse tentando gerar hashes aleatoriamente e encontrasse um válido, ele seria ocultado pelo anonimato, pois você não saberia de quem era.

Opção B) use uma tecnologia do lado do servidor para limitar o acesso. Este método é mais seguro, mas mais caro para o servidor. Você configurará um script que permitirá/negará acesso ao arquivo com base em session_permissions ou algo parecido. Veja o código a seguir que seria chamado acessando algo como:

http://yourserver.com/getprotectedfile.php?filename=213333.jpeg
session_start();

// logic to verify the user is ok
if($_SESSION['user_access']!=true) {
    exit('user not allowed here');

// WATCHOUT! THIS IS NOT SECURE! EXAMPLE ONLY.
// on a production site you have to be sure that $filename will not point to a system file
$filename = $_GET['filename'];

// gets the file and outputs it to the user
header('Content-type: image/jpeg');
header('Content-Length: '.filesize($filename));
readfile($filename);