Abstrskalacja dostawcy plików Dostawcy plików to warstwa abstrakcji na systemie plików. Jego głównym interfejsem jest IFileProvider. IFileProvider udostępnia metody pozyskiwania informacji o pliku (IFileInfo), informacji o katalogu (IDirectoryContents) oraz ustawiania powiadomień o zmianach (za pomocą IChangeToken).
Interfejs IFileInfo udostępnia metody i właściwości do manipulacji pojedynczymi plikami i katalogami. Posiada dwie właściwości boolowe, Exists i IsDirectory, oraz dwie właściwości dla dwóch profili, Name i Length (per bajt), a także zawiera właściwość LastModified date. Możesz także czytać zawartość pliku za pomocą metody CreateReadStream.
Implementacja dostawcy plików Do wyboru są trzy implementacje IFileProvider: fizyczna, osadzona i kompozytowa. Fizyczny typ służy do dostępu do plików w rzeczywistym systemie. Embedded służy do dostępu do plików osadzonych w asemblerze. Typ złożony to połączenie dwóch pierwszych metod.
PhysicalFileProvider PhysicalFileProvider zapewnia dostęp do fizycznego systemu plików. Zawiera on typ System.IO.File, który obejmuje wszystkie ścieżki do katalogu i jego podkatalogów. Ten typ zakresu ogranicza dostęp do katalogu i jego podkatalogów, uniemożliwiając operacjom spoza zakresu dostępu do systemu plików. Podczas instancji takiego dostawcy musisz podać mu ścieżkę katalogową, którą serwer może używać jako bazowej ścieżki dla wszystkich żądań wysyłanych przez tego dostawcę (co ogranicza żądania dostępu poza ścieżką). W aplikacji ASP.NET Core możesz bezpośrednio instancjonować dostawcę PhysicalFileProvider lub zażądać interfejsu IFileProvider, korzystając z injectencji zależności konstruktora w kontrolerze i usłudze. To drugie skutkuje rozwiązaniami często bardziej elastycznymi i łatwiejszymi do przetestowania.
Utworzenie PhysicalFileProvider jest w rzeczywistości bardzo proste – wystarczy go zmaterializować i przekazać mu fizyczną ścieżkę. Następnie możesz przechodzić przez zawartość katalogu lub udostępniać podścieżki, aby uzyskać informacje o konkretnym pliku.
Zmodyfikuj metodę ConfigureServices() klasy Startup, aby rejestrować usługi potrzebne do dostępu do plików lokalnych, a następnie dodaj je do middleware poprzez inject constructor w middleware, aby móc kontrolować ścieżkę dostępu do plików w jednym miejscu (np. przy uruchamianiu aplikacji)
|