Todos los grandes sitios web no guardan las imágenes en la base de datos las guardan en el disco. Guardan una referencia a la posición de la imagen en una tabla. Y luego vincular desde allí.
¿Por qué? Actuación.
Extraer contenido pesado de una base de datos es un gran cuello de botella de rendimiento. Y las bases de datos no se escalan horizontalmente tan bien, por lo que significaría incluso un problema mayor. Todos los sitios grandes usan granjas de contenido estático para tratar con contenido estático como imágenes. Son servidores a los que no les importará tu identidad.
¿Cómo pueden mantener las imágenes realmente privadas? Ellos no.
El enlace de la imagen es, en sí mismo, la dirección y la contraseña. Tomemos Facebook, por ejemplo. Si guardo una foto privada en mi cuenta, no debería poder abrirla. Pero, siempre que tengas la dirección correcta, puedes.
This picture is private. Aviso el nombre del archivo
10400121_87110566301_7482172_n.jpg
(facebook cambia la url de vez en cuando por lo que el enlace puede ser quebrantada)
Es no secuencial. La única forma de hacerse una idea es conocer su dirección.
Según una foto de usuario anterior, no puede adivinar la siguiente.
Tiene una gran entropía por lo que incluso si comienzas a tomar conjeturas salvajes al azar tendrás una gran cantidad de fallas y, si llegas a una imagen, no podrás, a partir de ahí, darse cuenta de la identidad de los propietarios que, en sí mismo, es protección en el anonimato.
Editar (¿por qué no se debe almacenar imágenes en un "nombre de usuario" carpeta:.
Después de su edición se hizo evidente que se tiene intención de poner los archivos en el disco y no en la base de datos Esta edición cubre el nuevo escenario .
Aunque su lógica (crear una carpeta por usuario) se ve más organizada, crea problemas cuando comienza a tener muchos usuarios y muchas imágenes. Imagine que sus servidores tienen 1T de espacio en disco. Y también imaginemos que 1T es más o menos preciso con la carga que el servidor puede manejar.
Ahora tiene 11 usuarios, suponga que comienzan a cargar al mismo tiempo y cada uno cargará más de 100GB de archivos. Cuando alcanzan los 91 GB cada uno, el servidor está lleno y debe comenzar a almacenar imágenes en un servidor diferente. Si se sigue esa estructura de usuario/carpeta, deberá seleccionar uno de los usuarios y migrar todos sus datos a un servidor diferente. Además, establece un límite estricto para un usuario que no puede cargar más de 1T en archivos.
¿Debo almacenar todos los archivos en la misma carpeta, entonces?
No, los sitios grandes generalmente almacenan archivos en carpetas secuenciales (/ 000001 /,/000002 /, etc.) que tienen un número x definido de archivos por carpeta. Esto es principalmente para problemas de rendimiento del sistema de archivos.
Más sobre how many files in a directory is too many?
@AdrianCornish ¿Podría decirme qué quiere decir con qué ha intentado? No te pido que me escribas un código, solo quiero el algoritmo o el proceso que la mayoría de las personas sigan para poder seguir adelante si sé qué hacer – niko
¿Qué has intentado de nuevo? Puede almacenar una ruta al archivo, puede almacenar los datos binarios en la base de datos. ¿Cuál es tu pregunta real? –
Tu pregunta está mal formulada, estás preguntando cómo subir fotos. No es cómo almacenar las imágenes cargadas en su sitio.Además, ¿qué haces para proteger a los usuarios contra la carga de códigos maliciosos, imágenes con cargas ocultas, deteniendo a las personas que acaparan todas tus imágenes desde una URL indexable? –