sql >> Base de Datos >  >> RDS >> Mysql

Imágenes en MySQL

Como se dijo antes, blob Sin embargo, es el camino a seguir, como señala SanHolo, no es realmente bueno en cuanto al rendimiento y eventualmente tendrá problemas ya que su base de datos puede crecer muy, muy rápido.

¿Por qué no indexa el nombre del archivo en la base de datos y almacena el archivo en el servidor? ?

La principal razón para no permitir algo como esto serían los problemas de seguridad. Si realmente está tratando de cubrir sus bases al no permitir que todos los usuarios vean o obtengan contenido, tiene dos opciones.

Opción A) asigne al archivo un nombre único, no identificable, como lo hace Flickr. El nombre del archivo comprende dos hashes. Un hash de usuario y un hash de archivo. El segundo hash es secreto y la única forma de obtenerlo sería mediante prueba y error. Echa un vistazo a este archivo que tengo en Flickr . Está protegido por el usuario (solo la familia puede verlo), pero podrá acceder a él sin problemas ya que la URL en sí sirve como protección:http://farm2.static.flickr.com/1399/862145282_bf83f25865_b.jpg , incluso si estuviera tratando de generar hashes aleatoriamente y encontrara uno válido, estaría oculto por el anonimato ya que no sabría de quién era.

Opción B) use una tecnología del lado del servidor para limitar el acceso. Este método es más seguro pero más costoso para el servidor. Configurará un script que permitirá/denegará el acceso al archivo en función de los permisos de sesión o algo similar. Mire el siguiente código que se llamaría accediendo a 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);