Абстракция File Provider Файловые провайдеры — это слой абстракции поверх файловой системы. Её основной интерфейс — IFileProvider. IFileProvider предоставляет методы получения информации о файлах (IFileInfo), данных в каталоге (IDirectoryContents) и установки уведомлений об изменениях (с помощью IChangeToken).
Интерфейс IFileInfo предоставляет методы и свойства для обработки отдельными файлами и каталогами. У него есть два булевых свойства — Exists и IsDirectory, а также два свойства для двух профилей — Name и Length (на байт), а также свойство даты LastModified. Вы также можете читать содержимое файла с помощью метода CreateReadStream.
Реализация с помощью провайдера файлов Существует три варианта реализации IFileProvider: физическую, встроенную и композитную. Физический тип используется для доступа к файлам в реальной системе. Embedded используется для доступа к файлам, встроенным в ассемблер. Составный тип представляет собой комбинацию первых двух методов.
PhysicalFileProvider PhysicalFileProvider предоставляет доступ к физической файловой системе. Он инкапсулирует тип файла System.IO.File, который охватывает все пути к каталогу и её подкаталогам. Такой тип области ограничен доступом к каталогу и его подкаталогам, предотвращая доступ к файловой системе операций вне сферы действия. При создании такого провайдера необходимо предоставить ему путь в каталог, который сервер сможет использовать как базовый путь для всех запросов, сделанных этим провайдером (что ограничивает запросы доступа вне пути). В приложении ASP.NET Core вы можете напрямую создать провайдера PhysicalFileProvider или запросить интерфейс IFileProvider, используя инъекцию зависимостей конструктора в контроллере и сервисе. Последнее приводит к решениям, которые часто более гибкие и проще тестируемые.
Создание PhysicalFileProvider на самом деле очень просто: просто реализуйте его и пропустите по физическому маршруту. Затем вы можете проходить содержимое через его каталог или создавать подпути, чтобы получить информацию о конкретном файле.
Модифицируйте метод ConfigureServices() класса Startup, чтобы зарегистрировать сервисы, необходимые для доступа к локальным файлам, а затем добавьте их в промежуточное ПО через инъекцию конструкторов в промежуточном ПО, чтобы управлять путь доступа файлов в одном месте (то есть при запуске приложения).
|