1.PhysicalFileProvider 物理文件提供程序:
Startup->ConfigureServices中注入
IFileProvider PhysicalProvider = new PhysicalFileProvider(System.IO.Directory.GetCurrentDirectory()); services.AddSingleton(PhysicalProvider);
在Home控制器中拿到服务
private readonly IFileProvider fileProvider; public HomeController(ILogger<HomeController> logger, IFileProvider fileProvider) { _logger = logger; this.fileProvider = fileProvider; }
Index方法中我们使用文件提供程序
public IActionResult Index() { IDirectoryContents content= fileProvider.GetDirectoryContents(""); return View(content); }
Index.cshtml中打印出项目中所有文件
@{ ViewData["Title"] = "Home Page"; } @using Microsoft.Extensions.FileProviders @foreach (IFileInfo item in Model) { if (item.IsDirectory) { <li><span>@item.Name</span></li> } else { <li>@item.Name--@item.Length bytes</li> } }
2.EmbeddedFileProvider 嵌入式文件
创建一个文件
属性设置为嵌入式资源
生成时就会将该文件内容嵌入dll中
Startup->ConfigureServices中注入
//嵌入式文件 IFileProvider emeddedFileProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly()); services.AddSingleton<IFileProvider>(emeddedFileProvider);
Home控制器中创建一个Read方法 读取我们的嵌入式文件
/// <summary> /// 读取嵌入式文件 /// </summary> /// <returns></returns> public IActionResult Read() { IFileInfo file =fileProvider.GetFileInfo("Files/jsconfig.json"); using (var stream= file.CreateReadStream()) { byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); string fileString = System.Text.Encoding.Default.GetString(buffer); return Content(fileString); } }
启动项目访问我们的Read方法
成功访问到了我们dll中嵌入的内容
3.组合文件访问程序
可访问多种组合的文件资源
//物理文件 IFileProvider PhysicalProvider = new PhysicalFileProvider(System.IO.Directory.GetCurrentDirectory()); //嵌入式文件 IFileProvider emeddedFileProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly()); //组合 IFileProvider compositeFileProvider = new CompositeFileProvider(PhysicalProvider, emeddedFileProvider); //注入 services.AddSingleton(compositeFileProvider);
直接启动程序
物理文件提供程序与嵌入式文件提供程序功能都能使用