Dateianbieter-Abstraktion File Providers sind eine Abstraktionsschicht auf dem Dateisystem. Seine Hauptschnittstelle ist IFileProvider. IFileProvider stellt Methoden zur Verfügung, um Dateiinformationen (IFileInfo), Verzeichnisinformationen (IDirectoryContents) zu erhalten und Änderungsbenachrichtigungen einzustellen (mittels eines IChangeToken).
Die IFileInfo-Schnittstelle bietet Methoden und Eigenschaften zur Bearbeitung einzelner Dateien und Verzeichnisse. Es besitzt zwei boolesche Eigenschaften, Exists und IsDirectory, sowie zwei Eigenschaften für zwei Profile, Name und Length (pro Byte), und enthält außerdem eine LastModified-Date-Eigenschaft. Sie können den Dateiinhalt auch über die Methode CreateReadStream lesen.
Implementierung des Dateianbieters Es gibt drei Implementierungen des IFileProvider zur Auswahl: physisch, eingebettet und zusammengesetzt. Der physische Typ wird verwendet, um auf Dateien im eigentlichen System zuzugreifen. Eingebettet wird verwendet, um auf Dateien zuzugreifen, die in einer Assembler eingebettet sind. Der zusammengesetzte Typ ist eine Kombination der ersten beiden Methoden.
PhysicalFileProvider PhysicalFileProvider bietet Zugriff auf das physische Dateisystem. Sie kapselt den System.IO.Dateityp, der alle Pfade zu einem Verzeichnis und dessen Unterverzeichnisse umfasst. Dieser Umfang schränkt den Zugriff auf ein Verzeichnis und dessen Unterverzeichnisse ein und verhindert, dass Operationen außerhalb des Umfangs auf das Dateisystem zugreifen. Beim Instanziieren eines solchen Providers müssen Sie ihm einen Verzeichnispfad bereitstellen, den der Server als Basispfad für alle Anfragen dieses Providers verwenden kann (was Zugriffsanfragen außerhalb des Pfades einschränkt). In einer ASP.NET Core-Anwendung kann man direkt einen PhysicalFileProvider-Anbieter instanzieren oder eine IFileProvider-Schnittstelle anfordern, indem man Konstruktor-Abhängigkeitsinjektionen im Controller und Service verwendet. Letzteres führt zu Lösungen, die oft flexibler und leichter zu testen sind.
Einen PhysicalFileProvider zu erstellen ist tatsächlich sehr einfach: Einfach materialisieren und einen physischen Pfad übergeben. Du kannst dann den Inhalt durch das Verzeichnis durchlaufen oder Unterpfade bereitstellen, um Informationen zu einer bestimmten Datei zu erhalten.
Ändern Sie die ConfigureServices()-Methode der Startup-Klasse, um die Dienste zu registrieren, die für den Zugriff auf lokale Dateien benötigt werden, und fügen Sie diese dann durch Constructor-Injection in der Middleware zur Middleware hinzu, sodass Sie den Zugriffspfad der Dateien an einem Ort (also beim Start der Anwendung) kontrollieren können
|