Tutti i grandi siti Web non salvare le immagini nel database li memorizzano nel disco. Salvano un riferimento alla posizione dell'immagine in una tabella. E poi link da lì.
Perché? Prestazione.
Estrarre un contenuto pesante da un database è un collo di bottiglia enorme. E i database non scalano orizzontalmente così bene, quindi significherebbe anche un problema più grande. Tutti i grandi siti utilizzano farm di contenuto statico per gestire contenuti statici come le immagini. Sono i server a cui non importa meno della tua identità.
Come mantengono le foto davvero riservate? Non lo fanno.
Il collegamento dell'immagine è, di per sé, l'indirizzo e la password. Prendiamo Facebook, per esempio. Se memorizzo un'immagine privata sul mio account, non dovresti riuscire ad aprirlo. Ma, finché hai l'indirizzo corretto puoi.
This picture is private. Avviso il nome del file
10400121_87110566301_7482172_n.jpg
(facebook cambia l'url di tanto in tanto in modo che il collegamento può essere annullata)
è non sequenziale. L'unico modo per ottenere l'immagine è conoscere il suo indirizzo.
Sulla base di una precedente foto utente non si può indovinare il prossimo.
Ha un'enorme entropia quindi anche se inizi a prendere ipotesi casuali avrai una grande quantità di fallimenti e, se arrivi a una foto, non sarai in grado, da lì, di realizzare l'identità del proprietario che, di per sé, è la protezione nell'anonimato.
Edit (perché non è necessario memorizzare le immagini in una cartella "nome utente":.
Dopo la tua modifica è apparso chiaro che si fa l'intenzione di mettere i file su disco e non sulla base di dati Questa modifica copre il nuovo scenario .
Anche se la logica (creazione di una cartella per utente) è più organizzata, crea problemi quando si iniziano ad avere molti utenti e molte immagini. Immagina che i tuoi server abbiano uno spazio su disco 1T. E lascia anche immaginare che 1T sia più o meno preciso con il carico che il server può gestire.
Ora hai 11 utenti, supponi che inizino a caricare contemporaneamente e ognuno caricherà più di 100 GB di file. Quando raggiungono 91 GB, il server è pieno e devi iniziare a memorizzare le immagini su un altro server. Se questa struttura utente/cartella viene seguita, dovresti selezionare uno degli utenti e migrare tutti i suoi dati su un altro server. Inoltre, rende difficile un utente che non può caricare più di 1T nei file.
Devo memorizzare tutti i file nella stessa cartella, quindi?
No, i siti di grandi dimensioni generalmente archiviano i file in cartelle sequenziali (/ 000001 /,/000002 /, ecc.) Con un numero x definito di file per cartella. Questo è principalmente per problemi di prestazioni del file system.
Altro su how many files in a directory is too many?
@AdrianCornish Puoi dirmi cosa intendi con cosa hai provato? Non ti sto chiedendo di scrivere un codice per me, voglio solo l'algoritmo o il processo che la maggior parte delle persone segue in modo da poter andare avanti se so cosa fare – niko
Ancora una volta cosa hai provato? È possibile memorizzare un percorso per il file, è possibile memorizzare i dati binari nel database. Qual è la tua domanda attuale? –
La tua domanda è mal formulata - stai chiedendo come caricare le foto. Non è come memorizzare le immagini caricate sul tuo sito.Inoltre, cosa stai facendo per proteggere gli utenti dal caricare codice dannoso, immagini con payload nascosti, impedire alle persone di afferrare tutte le tue immagini da un URL indicizzabile –