如何在 ASP.Net Core 中使用 File Providers
ASP.Net Core 為了便于獲取文件和文件夾信息,監(jiān)視文件變更, 在文件系統(tǒng)中提供了一個抽象層:File Providers, 這篇文章將會討論如何使用 File Providers 。
File Provider 抽象層
file prodivers 實現(xiàn)了 IFileProvider 接口,它的實現(xiàn)子類大概有三塊: Physical,Embedded 和 Composite ,同時這個接口提供了可用于獲取文件和文件夾的相關(guān)信息的方法,接口定義如下:
public?interface?IFileProvider{IDirectoryContents?GetDirectoryContents(string?subpath);IFileInfo?GetFileInfo(string?subpath);IChangeToken?Watch(string?filter);}如果要實現(xiàn) 更改通知,還需要用 IChangeToken 接口,代碼如下:
public?interface?IChangeToken{bool?ActiveChangeCallbacks?{?get;?}bool?HasChanged?{?get;?}IDisposable?RegisterChangeCallback(Action<object>?callback,?object?state);}下面是 IFileProvider 接口的三個具體實現(xiàn)及應(yīng)用,羅列如下:
PhysicalFileProvider
用于對 物理文件 的訪問
EmbeddedFileProvider
用于對 程序集 內(nèi)的文件訪問
CompositeFileProvider
實現(xiàn)前面兩者的混合訪問
使用 PhysicalFileProvider
要想在 ASP.Net Core 中演示 PhysicalFileProvider,首先將其注入到 ServiceCollection 容器中,如下代碼所示:
public?void?ConfigureServices(IServiceCollection?services){services.AddControllersWithViews();IFileProvider?physicalProvider?=?new?PhysicalFileProvider(Directory.GetCurrentDirectory());services.AddSingleton<IFileProvider>(physicalProvider);}注入到容器后,現(xiàn)在就可以在 Controller 使用依賴注入獲取實例了,如下代碼所示:
public?class?HomeController?:?Controller{private?readonly?ILogger<HomeController>?_logger;private?readonly?IFileProvider?_fileProvider;public?HomeController(ILogger<HomeController>?logger,?IFileProvider?fileProvider){_logger?=?logger;this._fileProvider?=?fileProvider;}}下面在 Index 方法中使用 GetDirectoryContents() 來獲取當(dāng)前項目文件夾下的所有文件,如下代碼所示:
public?IActionResult?Index(){List<string>?lst?=?new?List<string>();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<IFileProvider>(embeddedProvider);}使用 CompositeFileProvider
看到 Composite 單詞,是不是想起了設(shè)計模式中的 組合模式,對的,這里 CompositeFileProvider 也是類似的操作手法,它可以將一個或者多個的 EmbeddedFileProvider 和 PhysicalFileProvider 進(jìn)行組合,進(jìn)而合成一個 ?CompositeFileProvider 供上層進(jìn)行訪問,如果有點懵的話,可參考如下代碼:
var?physicalProvider?=?_env.ContentRootFileProvider; var?embeddedProvider?=?new?EmbeddedFileProvider(Assembly.GetEntryAssembly()); var?compositeProvider?=?new?CompositeFileProvider(physicalProvider,?embeddedProvider);總的來說,你可以利用 File Providers 來獲取文件或文件夾的信息,同時也可以實現(xiàn)變更通知,如果想在 ASP.Net Core 中實現(xiàn)文件系統(tǒng)訪問,可以通過依賴注入的方式按需使用你的 File Provider。
譯文鏈接:https://www.infoworld.com/article/3307516/how-to-use-file-providers-in-aspnet-core.html
總結(jié)
以上是生活随笔為你收集整理的如何在 ASP.Net Core 中使用 File Providers的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web API实现微信公众平台开发-服务
- 下一篇: asp.net ajax控件工具集 Au