日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

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

發(fā)布時間:2023/12/4 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在 ASP.Net Core 中使用 File Providers 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。