Abstracciones de proveedor de archivos Los proveedores de archivos son una capa de abstracción sobre el sistema de archivos. Su interfaz principal es IFileProvider. IFileProvider expone métodos para obtener información de archivos (IFileInfo), información de directorio (IDirectoryContents) y notificaciones de cambios de configuración (mediante un IChangeToken).
La interfaz IFileInfo proporciona métodos y propiedades para manipular archivos y directorios individuales. Tiene dos propiedades booleanas, Exists e IsDirectory, y dos propiedades para dos perfiles, Nombre y Longitud (por byte), e incluye también una propiedad de fecha LastModificat. También puedes leer el contenido del archivo mediante el método CreateReadStream.
Implementación del proveedor de archivos Hay tres implementaciones de IFileProvider entre las que elegir: física, embebida y compuesta. El tipo físico se utiliza para acceder a archivos en el sistema real. El término incrustado se utiliza para acceder a archivos incrustados en un ensamblador. El tipo compuesto es una combinación de los dos primeros métodos.
PhysicalFileProvider PhysicalFileProvider proporciona acceso al sistema de archivos físico. Encapsula el tipo System.IO.File, que abarca todas las rutas hacia un directorio y sus subdirectorios. Este tipo de alcance restringe el acceso a un directorio y sus subdirectorios, impidiendo que operaciones fuera del alcance accedan al sistema de archivos. Al instanciar a dicho proveedor, debes proporcionarle una ruta de directorio que el servidor pueda usar como ruta base para todas las solicitudes realizadas por este proveedor (lo que restringe las solicitudes de acceso fuera de la ruta). En una aplicación ASP.NET Core, puedes instanciar directamente a un proveedor PhysicalFileProvider, o puedes solicitar una interfaz IFileProvider usando inyección de dependencia de constructor en el controlador y el servicio. Esto último da lugar a soluciones que suelen ser más flexibles y fáciles de probar.
Crear un PhysicalFileProvider es en realidad muy sencillo, solo tienes que materializarlo y pasarle un camino físico. Luego puedes recorrer el contenido a través de su directorio o proporcionar subrutas para obtener información sobre un archivo específico.
Modifica el método ConfigureServices() de la clase Startup para registrar los servicios necesarios para acceder a archivos locales, y luego añádelos al middleware mediante inyección de constructores en el middleware, para que puedas controlar la ruta de acceso de los archivos en un solo lugar (es decir, cuando se inicia la aplicación)
|