ASP.NET Core File Providers

原创 Laughing  2017-09-13 22:14  阅读 78 次 评论 0 条

基本使用

  1. IFileProvider provider = new PhysicalFileProvider(Directory.GetCurrentDirectory() + "//wwwroot");  
  2.            IDirectoryContents contents = provider.GetDirectoryContents("");  
  3.            IFileInfo fileInfo = provider.GetFileInfo("js/site.js");  
  4.            ViewData["fileName"] = fileInfo.Name;  
  5.            ViewData["lastModified"] = fileInfo.LastModified.ToString("yyyy-MM-dd");  

File Provider的使用

这个例子,我们获取网站根目录下面的文件夹以及文件信息,然后我们遍历内容,如果是文件夹,我们输出文件夹的名称,如果是文件,我们输出文件的名称以及文件的大小。具体的代码如下:

首先在startup.cs文件中ConfigureServices方法中,获取文件夹信息,并且进行注入。
  1. var physicalFileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory());  
  2.             var embeddedFileProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly());  
  3.             var compositeFileProvider = new CompositeFileProvider(physicalFileProvider, embeddedFileProvider);  
  4.             services.AddSingleton<IFileProvider>(compositeFileProvider);  
HomeController.cs中构造函数获取注入信息,然后在Index()方法中获取文件信息
  1. private readonly IFileProvider _fileProvider;  
  2.   
  3.         public HomeController(IFileProvider fileProvider){  
  4.             _fileProvider = fileProvider;  
  5.         }  
  6.   
  7.         public IActionResult Index()  
  8.         {  
  9.             var contents = _fileProvider.GetDirectoryContents("");  
  10.             return View(contents);  
  11.         }  
最后在视图页面遍历输出信息
  1. @{  
  2.     ViewData["Title"] = "首页";  
  3. }  
  4. @using Microsoft.Extensions.FileProviders  
  5. @model IDirectoryContents  
  6.   
  7. <div class="panel">  
  8.     <div class="panel-body">  
  9.     <h2>文件内容</h2>  
  10.         <ul>  
  11.         @foreach(IFileInfo fileInfo in Model){  
  12.             if(fileInfo.IsDirectory){  
  13.             <li><strong>@fileInfo.Name</strong></li>  
  14.             }else{  
  15.             <li>@fileInfo.Name ----   @fileInfo.Length <span style="color: red">bytes</span></li>  
  16.             }  
  17.             }  
  18.         </ul>  
  19.     </div>  
  20. </div>  
  21.   
  22. @section Scripts{  
  23.       
  24. }  

EmbeddedFileProvider

EmbeddedFileProvider用户访问程序集中定义的文件信息,文件信息在工程的csproj下面的ItemGroup节点的 EmbeddedResource中进行定义,例如,我的工程文件配置信息如下:

  1. <Project Sdk="Microsoft.NET.Sdk.Web">  
  2.   
  3.   <PropertyGroup>  
  4.     <TargetFramework>netcoreapp2.0</TargetFramework>  
  5.   </PropertyGroup>  
  6.   
  7.   <ItemGroup>  
  8.     <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />  
  9.     <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.0.0" />  
  10.     <PackageReference Include="bootstrap" Version="3.3.7" />  
  11.     <PackageReference Include="Bootstrap.v3.Datetimepicker" Version="4.17.45" />  
  12.     <PackageReference Include="FontAwesome" Version="4.7.0" />  
  13.     <PackageReference Include="jQWidgets.AspNetCore.Mvc.Bootstrap.TagHelpers" Version="1.0.6" />  
  14.     <PackageReference Include="bootstrap-fileinput" Version="4.4.3" />  
  15.     <PackageReference Include="bootstrap-slider" Version="5.0.13" />  
  16.     <PackageReference Include="bootstrap.tree" Version="1.0.2" />  
  17.   </ItemGroup>  
  18.   
  19.   <ItemGroup>  
  20.     <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />  
  21.   </ItemGroup>  
  22.   
  23.   <ItemGroup>  
  24.     <EmbeddedResource Include="**\*.js" Exclude="bin\**;obj\**;**\*.xproj;packages\**;@(EmbeddedResource)" />  
  25.     <Content Update="wwwroot\**\*;Views\**\*;Areas\**\Views;appsettings.json;web.config">  
  26.       <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>  
  27.     </Content>  
  28.   </ItemGroup>  
  29. </Project>  

这样,我们上面的代码返回信息如下图

本文地址:https://www.lisen.me/asp-net-core-file-providers.html
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情