2013-10-16 5 views
6

Sto costruendo un'app MVC4 utilizzando un'architettura multi tenant separata per il database. I clienti hanno anche la possibilità di caricare file (per lo più 1-5 MB di dimensioni, file di testo/documenti).Dove memorizzare i file caricati dall'utente in asp.net MVC 4 webapp?

Ho concluso che è meglio memorizzare i file in un filesystem mantenendo i metadati nel database (cartella separata per ogni cliente), tuttavia, non ho idea di dove conservare i file. MVC ha posizioni speciali per questo? O dovrei semplicemente creare una cartella sul server da qualche parte.

E la creazione di cartelle di questo tipo è protetta per impostazione predefinita?

Grazie!

risposta

4

Personalmente, direi che tale decisione dovrebbe essere basata sui requisiti dell'applicazione.

Quando sto creando una semplice app con possibilità di caricamento, utilizzo sempre il DB = Metadata; File stesso = filesystem, in quanto ho un modulo che implemento in ogni app come questa ed è un approccio facile da mantenere. Potrebbe portare problemi di sicurezza, in particolare con il server di accesso multiutente/app, dove la sicurezza di "accesso alla cartella" dovrebbe essere mantenuta su un livello di cartella principale con autorizzazioni rigorosamente definite (non chmod 777 tutti :-)) Finora non ho ha avuto un solo problema con questo approccio. L'accesso esterno è collegato da guide esterne per file specifici.

Per ambiente multi-tenant i miei database di file (o s li chiamo database multimediali) contengono anche l'URL CDN, ovvero l'indirizzo del server che ospita fisicamente il file e il file è servito da HttpHandler. Ancora una volta, posso immaginare un modo più sicuro e flessibile, ma questo non mi ha mai deluso fino ad ora, e sono consapevole dei problemi che accompagna questa soluzione e io sto bene con quello.

Ma poiché questo è un argomento interessante per me, mi piacerebbe sapere se qualcuno propone soluzioni diverse, quando si tratta di filestorage.

8

Bene, mi piacerebbe consigliare per quanto segue, Gitzerai ha già dato molto a cui pensare.

Gitzerai forse troverai qui qualcosa che hai perso durante la creazione di una soluzione per le tue app.

In ogni caso,

è possibile caricare i file sul file system, ma ci sono diverse cose che dovete guardare fuori per.

  • Assicurarsi che account che esegue il pool di applicazioni IIS ha solo i privilegi di lettura e scrittura a quella cartella e non eseguire in nessun caso

  • estensione Controlla il file e impedire che e eseguibili (.exe, .dll e altro)

  • Archiviare i file senza estensione o con qualche estensione .zzz nel caso. Quando l'utente deve scaricare il file, è possibile impostare dinamicamente l'estensione originale

  • Utilizzare solo una cartella per la memorizzazione di tutti i file creati manualmente.Evitare di creare più cartelle in modo dinamico, se non proprio necessario

  • creare un'app separata che di tanto in tanto fare un controllo di integrità per i record nel database vs file nel file system

+0

grazie :) roba buona – user2713516