Domanda

Ho intenzione di ospitare i file inviati dall'utente.Devo prendere alcuni dati dal file e quindi spostarli in una directory.

Ci sono due punti di interesse per la durata di questo file.Il primo avviene quando i dati vengono estratti e il secondo avviene quando il file viene archiviato in modo che possa essere condiviso.

Quando i dati vengono estratti, ho pensato di rinominare il file in qualcosa di univoco o di aggiungere una stringa univoca al nome file per evitare che sovrascriva altri file esistenti.

Quando il file verrà archiviato, ho pensato a tre strategie.Uno è mantenere tutti i file caricati da determinati dati in una cartella.(04/settembre 2006, 05/gennaio 2008) L'altro è tenere una cartella e continuare a riempirla fino al numero massimo di file che voglio tenere nella cartella, quindi crearne un'altra (/folder001/, /folder002/, /cartella003/, ecc.).Un altro è creare sottocartelle una volta raggiunta una certa soglia.Quindi come (/j/jd/jde/jdelator) L'ho visto in Unix, non so come spiegarlo.

La mia domanda è: che tipo di strategie avete trovato utili o utilizzate?

È stato utile?

Soluzione

Quando i dati vengono astratti, sceglierei qualcosa come: filename + millisec();È improbabile che due chiamate al millisecondo siano identiche e il nome del file sia più intuitivo durante l'accesso.

La strategia della data può essere conveniente se decidi di rimuovere file vecchi e inutilizzati:devi solo ottenere la cartella 2006 e rimuovere tutto ciò a cui non è stato effettuato l'accesso nell'ultimo anno, secondo il tuo registro.Anche questo può essere una buona indicazione per i tuoi utenti, poiché sapranno se si tratta di un file nuovo o meno.La cartellaXYZ è solo una variante di questa, sostituendo la data con un tag ogni N file.

La soglia delle sottocartelle ti aiuta a mantenere basso il numero di voci delle tue directory, quindi l'accesso è più veloce.Tieni presente che questa soluzione richiede a volte di spostare i file (e quindi di interrompere alcuni URL se non mappati) quando una particolare directory cresce.

Un'altra possibilità è utilizzare un DB con UID corrispondente alla posizione del nome file e accedere al file tramite http://server.com/UID/nomefile.txt .In questo modo, l'utente salva il file come "nomefile.txt" che gli è conveniente, e tu sai con l'URL dove trovare il file (usando il DB per trasformare l'UID in posizione).Tieni presente che l'UID può essere un checksum (MD5, SHA-1) per gestire i duplicati dello stesso file.

Altri suggerimenti

Voterei con guid in un database e quindi utilizzerei l'intestazione Content-Disposition per rinominarlo con il nome file originale, se necessario.Una cosa che consiglierei è che le cartelle che usi siano archiviate al di fuori della radice web;non vuoi che gli utenti carichino file nelle cartelle dell'applicazione.

Ho utilizzato un database relazionale che tagga gli ID (int) con gli uuid che sono il nome dei file.In questo modo non importa come sono sul disco.Mi aiuta a offuscare i file.Inoltre, posso quindi utilizzare JOIN per "rinominare" il file in modo arbitrario.Inoltre, posso usare diversi "nomi". Tutto dipende dalla tua app e da dove è in esecuzione.

Sebbene dipenda dalla tua applicazione e così via, suggerirei di mantenere lo schema del repository di file molto semplice per ora e di decidere una strategia più elaborata in seguito.In altre parole, per un po' crei una sorta di "caos gestito";la struttura e la strategia verranno discusse più tardi, quando scoprirai tutti i requisiti e le specifiche del dominio.Mantenendo la semplicità, puoi cambiare tutto facilmente.

Ad ogni modo, il cambiamento è inevitabile, la cosa migliore che puoi fare ora è scegliere qualche strategia e documentare il tutto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top