【.NETCORE】文件提供程序

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);

  

直接启动程序
物理文件提供程序与嵌入式文件提供程序功能都能使用

原文地址:https://www.cnblogs.com/lbonet/p/14683551.html