成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在 ASP.Net Core 中使用 File Providers

安全 應用安全
ASP.Net Core 為了便于獲取文件和文件夾信息,監視文件變更, 在文件系統中提供了一個抽象層:File Providers, 這篇文章將會討論如何使用 File Providers 。

 [[381267]]

本文轉載自微信公眾號「碼農讀書」,作者碼農讀書。轉載本文請聯系碼農讀書公眾號。

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<object> callback, object state); 
  8.    } 

 

下面是 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<IFileProvider>(physicalProvider); 
  8.         } 

 

注入到容器后,現在就可以在 Controller 使用依賴注入獲取實例了,如下代碼所示:

 

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

 

下面在 Index 方法中使用 GetDirectoryContents() 來獲取當前項目文件夾下的所有文件,如下代碼所示:

 

  1. public IActionResult Index() 
  2.        { 
  3.            List<string> lst = new List<string>(); 
  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<IFileProvider>(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

 

 

責任編輯:武曉燕 來源: 碼農讀書
相關推薦

2021-03-17 09:45:31

LazyCacheWindows

2021-02-06 21:40:13

SignalR通訊TypeScript

2021-02-02 16:19:08

Serilog日志框架

2021-03-10 09:40:43

LamarASP容器

2021-02-28 20:56:37

NCache緩存框架

2021-02-03 13:35:25

ASPweb程序

2021-01-28 22:39:35

LoggerMessa開源框架

2021-01-07 07:39:07

工具接口 Swagger

2021-03-03 22:37:16

MediatR中介者模式

2021-01-31 22:56:50

FromServiceASP

2021-06-22 16:59:56

微軟.NETC# 軟件開發

2021-01-26 14:57:00

中間件應用模塊化

2021-04-12 07:03:10

輕量級模塊化框架

2021-01-04 05:44:54

框架日志

2017-10-20 08:52:11

內存緩存并發模式Linux

2022-08-01 08:00:00

開發工具跟蹤偵聽器

2009-02-05 14:02:46

SmtpMail發送郵件ASP.NET

2021-04-14 07:35:12

Json格式化日期

2021-11-01 14:52:38

ElasticSear索引SQL

2021-02-17 08:51:55

cookie身份驗證
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品国产综合久久久久久漫画 | 福利精品在线观看 | 亚洲视频在线免费观看 | 精品一区二区视频 | av黄色在线 | 97精品超碰一区二区三区 | a级片网站 | 黑色丝袜三级在线播放 | 成人免费福利 | 香蕉婷婷 | 99在线资源| 免费观看黄色片视频 | 日日干日日 | 精品一二区 | 精品国产亚洲一区二区三区大结局 | 国产精品一区二区av | 国产精品日日夜夜 | 久久av一区 | 欧美成人免费在线视频 | 波波电影院一区二区三区 | 97精品超碰一区二区三区 | 日韩欧美中文 | 人妖一区| 日韩一区二区三区在线观看视频 | 99热热99 | 给我免费的视频在线观看 | 伊人网在线综合 | 欧美精品一区在线发布 | 北条麻妃国产九九九精品小说 | 国产片侵犯亲女视频播放 | 久久伊人精品 | 偷拍第一页 | 欧美激情视频一区二区三区在线播放 | 久久av网站 | 亚州精品天堂中文字幕 | aaaaaaa片毛片免费观看 | 久久国产精品久久久久久 | 成人做爰9片免费看网站 | 中文字幕一区二区三区四区 | 日韩国产专区 | 午夜视频在线观看视频 |