.Net Core使用File Providers
導讀 | ASP.Net Core 為了便於獲取檔案和資料夾資訊,監視檔案變更, 在檔案系統中提供了一個抽象層:File Providers, 這篇文章將會討論如何使用 File Providers 。 |
file prodivers 實現了 IFileProvider 介面,它的實現子類大概有三塊: Physical,Embedded 和 Composite ,同時這個介面提供了可用於獲取檔案和資料夾的相關資訊的方法,介面定義如下:
public interface IFileProvider { IDirectoryContents GetDirectoryContents(string subpath); IFileInfo GetFileInfo(string subpath); IChangeToken Watch(string filter); }
如果要實現 更改通知,還需要用 IChangeToken 介面,程式碼如下:
public interface IChangeToken { bool ActiveChangeCallbacks { get; } bool HasChanged { get; } IDisposable RegisterChangeCallback(Action callback, object state); }
下面是 IFileProvider 介面的三個具體實現及應用,羅列如下:
- PhysicalFileProvider
用於對 物理檔案 的訪問
- EmbeddedFileProvider
用於對 程式集 內的檔案訪問
- CompositeFileProvider
實現前面兩者的混合訪問
使用 PhysicalFileProvider
要想在 ASP.Net Core 中演示 PhysicalFileProvider,首先將其注入到 ServiceCollection 容器中,如下程式碼所示:
public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); IFileProvider physicalProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory()); services.AddSingleton(physicalProvider); }
注入到容器後,現在就可以在 Controller 使用依賴注入獲取例項了,如下程式碼所示:
public class HomeController : Controller { private readonly ILogger_logger; private readonly IFileProvider _fileProvider; public HomeController(ILoggerlogger, IFileProvider fileProvider) { _logger = logger; this._fileProvider = fileProvider; } }
下面在 Index 方法中使用 GetDirectoryContents() 來獲取當前專案資料夾下的所有檔案,如下程式碼所示:
public IActionResult Index() { Listlst = new List(); var contents = _fileProvider.GetDirectoryContents(""); foreach (IFileInfo fileInfo in contents) { lst.Add(fileInfo.Name); } return View(); }
使用 EmbeddedFileProvider
顧名思義,它就是用來訪問注入到 程式集 中的檔案,下面的程式碼展示瞭如何將 EmbeddedFileProvider 注入到 ASP.Net Core 的容器中,如下程式碼所示:
public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); IFileProvider embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly()) ; services.AddSingleton(embeddedProvider); }
使用 CompositeFileProvider
看到 Composite 單詞,是不是想起了設計模式中的 組合模式,對的,這裡 CompositeFileProvider 也是類似的操作手法,它可以將一個或者多個的 EmbeddedFileProvider 和 PhysicalFileProvider 進行組合,進而合成一個 CompositeFileProvider 供上層進行訪問,如果有點懵的話,可參考如下程式碼:
var physicalProvider = _env.ContentRootFileProvider; var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly()); var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider);
總的來說,你可以利用 File Providers 來獲取檔案或資料夾的資訊,同時也可以實現變更通知,如果想在 ASP.Net Core 中實現檔案系統訪問,可以透過依賴注入的方式按需使用你的 File Provider。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2758069/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- .Net Core 使用SessionSession
- .net core使用RabbitMQMQ
- .net Core 使用AutoMapperAPP
- .Net Core 使用 FluentValidation
- 理解ASP.NET Core - 檔案伺服器(File Server)ASP.NET伺服器Server
- .Net Core中使用RabbitMQMQ
- .Net Core中使用GrpcRPC
- .net core中使用AutomapperAPP
- ASP.NET Core ----ASP.NET Core中使用Code FirstASP.NET
- .NET Core(.NET6)中gRPC使用RPC
- 在.NET Core 中使用Quartz.NETquartz
- .net core使用配置檔案
- .NET Core 使用MediatR CQRS模式模式
- .Net Core中使用ElasticSearch(二)Elasticsearch
- .NET Core 物件池的使用物件
- .net core 專案使用log4net
- ASP.NET Core初步使用Quartz.NETASP.NETquartz
- 【STACKX】Oracle core file分析利器STACKX 使用指南Oracle
- 在ASP.NET Core中用HttpClient(六)——ASP.NET Core中使用HttpClientFactoryASP.NETHTTPclient
- 使用.NET Core 2.1的Azure WebJobsWeb
- ASP.NET Core 中使用TypeScriptASP.NETTypeScript
- .NET Core 下使用 Apollo 配置中心
- .Net Core中簡單使用MongoDBMongoDB
- Docker結合.Net Core初步使用Docker
- 使用.NET Core建立Windows服務Windows
- 在.NET Core中使用Channel(一)
- 關於 .NET Core(.NET Core 指南)
- ASP.Net Core5.0 EF Core使用記錄ASP.NET
- 【.Net Core】 使用 Nginx 釋出 .Net Core 3.1 專案至LInux(Centos7)。NginxLinuxCentOS
- ASP.NET Core使用EF Core操作MySql資料庫ASP.NETMySql資料庫
- .NET Core
- 在 Arch Linux 中使用 .NET Core SDKLinux
- .NET Core使用 CancellationToken 取消API請求API
- .NET Core 中AutoMapper的配置及使用APP
- .NET Core使用FluentEmail傳送郵件AI
- .NET Core使用Nlog記錄日誌
- .Net Core之選項模式Options使用模式
- SkyWalking部署及.Net Core簡單使用