Il modo migliore per memorizzare le immagini su un file system [chiuso]

7

Sviluppo di un'applicazione in cui gli utenti devono caricare immagini. Non ho molta esperienza con i caricamenti di file in un'applicazione, quindi mi chiedo quale sia il modo migliore per archiviare le immagini caricate dagli utenti sul file system.

    
posta cobie 14.09.2012 - 17:21
fonte

3 risposte

15

Una buona strategia base di partenza è la seguente:

  • Crea una tabella chiamata "immagini". Assicurati che abbia una chiave primaria autoincrementante (chiameremo ID).
  • Quando un utente carica un'immagine, inserisce una riga in quella tabella, incluso il nome originale del file e l'estensione del file. Probabilmente traccerai anche il caricamento di utenti, data / ora, ecc.
  • Ottieni l'ultimo ID di inserimento da quella query. Salvare l'immagine in "your-image-path / (ID). (Ext)" nel file system. Ad esempio, "/images/350.png".
  • (consigliato) È possibile utilizzare l'ID come collegamento diretto all'immagine creando un semplice script wrapper che carica l'immagine per ID (oscurando in tal modo il nome del file effettivo o mantenendo le immagini all'esterno delle directory Web). Ad esempio, 'image.php? Id = 500' o '/ image / 500'. In questo script, puoi utilizzare il nome del file originale dalla tabella nell'intestazione http in modo che, quando lo scaricano, venga salvato sul client con il nome originale.

Aree di miglioramento:

  • Supporto per miniature. Al caricamento, genera una miniatura e la memorizza come ".thumbnail.jpg". Utilizza uno script wrapper per la riproduzione di miniature in base all'ID.
  • Directory di hashing. Se si prevedono più di 1000 immagini, è necessario suddividerle in più sottodirectory, in modo che il file system non diventi lento (il punto esatto in cui ciò accade varia a seconda del sistema operativo e di altri fattori). Quindi se hai un ID immagine di 6500, potresti salvarlo in "/images/6/6500.png"
  • Sicurezza. Convalida che un'immagine caricata è un'immagine reale prima di salvarla sul disco. Questo è particolarmente importante se si consente l'accesso diretto alle immagini - non si desidera accettare un file .php che può essere caricato e quindi eseguito. Assicurati inoltre che la configurazione del tuo server web sia configurata per evitare questo tipo di cose impedendo l'esecuzione di script dalle directory delle immagini.
risposta data 14.09.2012 - 22:05
fonte
5

Le immagini sono solo file, quindi puoi memorizzarli così come sono, altrimenti memorizzerai qualsiasi altro file.

Tuttavia, potresti volerlo trasformare un po '. Ad esempio, la maggior parte delle fotocamere digitali oggigiorno produce file con risoluzione assurdamente alta, ad es. 2000 pixel di larghezza. La maggior parte degli utenti non sa come ridurli a qualcosa di più gestibile, e anche se lo facessero, non hanno il tempo (o non possono essere infastiditi.) Quindi potresti voler permettere alle persone di caricare immagini di grandi dimensioni, quindi riducili.

Inoltre, cosa farai con le immagini? Visualizzarli su una pagina Web? Esistono solo determinati formati che funzionano su una pagina Web, ad es. se qualcuno ha caricato un'immagine TIFF, potresti convertirla in JPEG o PNG.

Infine, potresti voler aumentare la compressione. Se qualcuno ti invia un'immagine che è una risoluzione ragionevole, ma hanno tutte le opzioni di "qualità" fino a 11, sarà comunque un file di grandi dimensioni. Potresti comprimerlo di più per renderlo un file più piccolo.

Un'ultima considerazione: se hai intenzione di manipolare le immagini, potresti voler inserire tutte le immagini nello stesso formato, ad es. JPEG a una certa risoluzione e livello di compressione, quindi la manipolazione delle immagini ha solo 1 formato da gestire.

    
risposta data 14.09.2012 - 17:28
fonte
3

La strategia di archiviazione dovrebbe, nella maggior parte dei casi, derivare dalla progettazione concettuale del sito che richiede l'archiviazione delle immagini e il numero previsto di utenti. Avremo bisogno di più informazioni, penso; stai creando un sito come Photobucket o Flickr, progettato principalmente per essere un sito di hosting di immagini? Oppure le immagini sono una preoccupazione secondaria, come essere allegati ai messaggi? Quante immagini prevedi di dover archiviare? Quanti utenti avrà questo sistema?

Due strategie popolari che conosco e che ho utilizzato riguardano un database SQL, per fornire una concorrenza migliore di un file system flat. Hai una tabella, che rappresenta le immagini nel DB. Quella tabella ha quindi una colonna "BLOB" (oggetto grande binario) che memorizza i dati effettivi dei byte dell'immagine, o una stringa che trattiene il percorso dell'immagine in un file system piatto altrove. In entrambi i casi, la scansione dei dati relativi alle immagini è altamente parallelizzabile. La memorizzazione delle immagini su disco è più semplice e riduce le dimensioni del DB, ma riduce le prestazioni in situazioni con alto numero di utenti. Memorizzare le immagini come dati DB è l'opposto.

    
risposta data 14.09.2012 - 17:32
fonte

Leggi altre domande sui tag