Astrazione del provider di file I provider di file sono uno strato di astrazione sopra il file system. La sua interfaccia principale è IFileProvider. IFileProvider espone metodi per ottenere informazioni sui file (IFileInfo), informazioni sulla directory (IDirectoryContents) e impostare le notifiche di modifica (utilizzando un IChangeToken).
L'interfaccia IFileInfo fornisce metodi e proprietà per manipolare singoli file e directory. Ha due proprietà booleane, Exists e IsDirectory, e due proprietà per due profili, Name e Length (per byte), e include anche una proprietà LastModified date. Puoi anche leggere il contenuto del file tramite il metodo CreateReadStream.
Implementazione del provider di file Ci sono tre implementazioni di IFileProvider tra cui scegliere: fisica, embeddeded e composite. Il tipo fisico viene utilizzato per accedere ai file nel sistema vero e proprio. Embedded viene utilizzato per accedere ai file incorporati in un assembly. Il tipo composto è una combinazione dei primi due metodi.
PhysicalFileProvider PhysicalFileProvider fornisce accesso al file system fisico. Racchiude il tipo di file System.IO., che espia tutti i percorsi verso una directory e le sue sottodirectory. Questo tipo di ambito limita l'accesso a una directory e alle sue sottodirectory, impedendo che operazioni al di fuori dell'ambito accedano al file system. Quando si istanzia un tale provider, è necessario fornirgli un percorso di directory che il server possa utilizzare come percorso base per tutte le richieste effettuate da questo provider (il che limita le richieste di accesso al di fuori del percorso). In un'applicazione ASP.NET Core, puoi istanziare direttamente un provider PhysicalFileProvider, oppure puoi richiedere un'interfaccia IFileProvider utilizzando l'iniezione di dipendenza del costruttore nel controller e nel servizio. Quest'ultimo risultato risulta in soluzioni spesso più flessibili e facili da testare.
Creare un PhysicalFileProvider è in realtà molto semplice: basta materializzarlo e passargli un percorso fisico. Puoi quindi attraversare il contenuto attraverso la sua directory o fornire sottopercorsi per ottenere informazioni su un file specifico.
Modifica il metodo ConfigureServices() della classe Startup per registrare i servizi necessari ad accedere ai file locali, e poi aggiungili al middleware tramite iniezione di costruttori nel middleware, così da poter controllare il percorso di accesso dei file in un unico punto (cioè quando l'applicazione si avvia)
|