如何在ASP.NetCore中使用FileProviders

本文转载自微信公众号「码农读书」,作者码农读书。转载本文请联系码农读书公众号。

ASP.Net Core 为了便于获取文件和文件夹信息,监视文件变更, 在文件系统中提供了一个抽象层:File Providers, 这篇文章将会讨论如何使用 File Providers 。

File Provider 抽象层

file prodivers 实现了 IFileProvider 接口,它的实现子类大概有三块: Physical,Embedded 和 Composite ,同时这个接口提供了可用于获取文件和文件夹的相关信息的方法,接口定义如下:

 
 
 
  1. public interface IFileProvider 
  2.     { 
  3.         IDirectoryContents GetDirectoryContents(string subpath); 
  4.  
  5.         IFileInfo GetFileInfo(string subpath); 
  6.  
  7.         IChangeToken Watch(string filter); 
  8.     } 

如果要实现 更改通知,还需要用 IChangeToken 接口,代码如下:

 
 
 
  1. public interface IChangeToken 
  2.    { 
  3.        bool ActiveChangeCallbacks { get; } 
  4.  
  5.        bool HasChanged { get; } 
  6.  
  7.        IDisposable RegisterChangeCallback(Action callback, object state); 
  8.    } 
  9. 下面是 IFileProvider 接口的三个具体实现及应用,罗列如下:

    • PhysicalFileProvider

    用于对 物理文件 的访问

    • EmbeddedFileProvider

    用于对 程序集 内的文件访问

    • CompositeFileProvider

    实现前面两者的混合访问

    使用 PhysicalFileProvider

    要想在 ASP.Net Core 中演示 PhysicalFileProvider,首先将其注入到 ServiceCollection 容器中,如下代码所示:

     
     
     
    1. public void ConfigureServices(IServiceCollection services) 
    2.         { 
    3.             services.AddControllersWithViews(); 
    4.  
    5.             IFileProvider physicalProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()); 
    6.  
    7.             services.AddSingleton(physicalProvider); 
    8.         } 

    注入到容器后,现在就可以在 Controller 使用依赖注入获取实例了,如下代码所示:

     
     
     
    1. public class HomeController : Controller 
    2.    { 
    3.        private readonly ILogger _logger; 
    4.        private readonly IFileProvider _fileProvider; 
    5.  
    6.        public HomeController(ILogger logger, IFileProvider fileProvider) 
    7.        { 
    8.            _logger = logger; 
    9.            this._fileProvider = fileProvider; 
    10.        } 
    11.    } 

    下面在 Index 方法中使用 GetDirectoryContents() 来获取当前项目文件夹下的所有文件,如下代码所示:

     
     
     
    1. public IActionResult Index() 
    2.        { 
    3.            List lst = new List(); 
    4.            var contents = _fileProvider.GetDirectoryContents(""); 
    5.  
    6.            foreach (IFileInfo fileInfo in contents) 
    7.            { 
    8.                lst.Add(fileInfo.Name); 
    9.            } 
    10.  
    11.            return View(); 
    12.        } 

    使用 EmbeddedFileProvider

    顾名思义,它就是用来访问注入到 程序集 中的文件,下面的代码展示了如何将 EmbeddedFileProvider 注入到 ASP.Net Core 的容器中,如下代码所示:

     
     
     
    1. public void ConfigureServices(IServiceCollection services) 
    2.         { 
    3.             services.AddControllersWithViews(); 
    4.  
    5.             IFileProvider embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly()) 
    6.                 ; 
    7.             services.AddSingleton(embeddedProvider); 
    8.         } 

    使用 CompositeFileProvider

    看到 Composite 单词,是不是想起了设计模式中的 组合模式,对的,这里 CompositeFileProvider 也是类似的操作手法,它可以将一个或者多个的 EmbeddedFileProvider 和 PhysicalFileProvider 进行组合,进而合成一个 CompositeFileProvider 供上层进行访问,如果有点懵的话,可参考如下代码:

     
     
     
    1. var physicalProvider = _env.ContentRootFileProvider; 
    2. var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly()); 
    3. var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider); 

    总的来说,你可以利用 File Providers 来获取文件或文件夹的信息,同时也可以实现变更通知,如果想在 ASP.Net Core 中实现文件系统访问,可以通过依赖注入的方式按需使用你的 File Provider。

    译文链接:https://www.infoworld.com/article/3307516/how-to-use-file-providers-in-aspnet-core.html

    名称栏目:如何在ASP.NetCore中使用FileProviders
    文章网址:http://www.csdahua.cn/qtweb/news49/353549.html

    网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网