معرفی
با استفاده از ارائه دهندگان فایل در ASP.NET Core می توان به سیستم فایل دسترسی داشت. به عبارت دیگر، می توان گفت که "ارائه دهنده فایل یک انتزاع از سیستم فایل است". ارائه دهندگان فایل از رابط IFileProvider استفاده می کنند و روش هایی برای دریافت اطلاعات فایل، اطلاعات دایرکتوری و همچنین اعلان تغییر راه اندازی دارد.
IFileInfo برای دریافت اطلاعات فایل استفاده میشود و روشها و ویژگیها را برای فایلها و فهرستهای جداگانه ارائه میکند. رابط IDirectoryContents برای بازیابی محتوای دایرکتوری در ارائه دهنده فایل استفاده می شود. رابط IchangeToken اعلانهایی را منتشر میکند که تغییری رخ داده است.
سه نوع پیاده سازی IFileProvider وجود دارد -
- Physical File Provider - برای دسترسی به فایل واقعی یا فیزیکی سیستم استفاده می شود
- Embedded File Provider - برای دسترسی به فایل هایی که در اسمبلی ها جاسازی شده اند استفاده می شود.
- ارائه دهنده فایل ترکیبی - برای دسترسی ترکیبی به فایل ها از یک یا چند ارائه دهنده استفاده می شود.
PhysicalFileProvider
PhysicalFileProvider System.IO را می پوشاند. نوع فایل و دسترسی به سیستم فایل فیزیکی را فراهم می کند. قادر به دسترسی به تمام مسیرهای یک دایرکتوری و زیر شاخه است. دسترسی محدودی به برخی از دایرکتوری ها دارد. ما می توانیم یک ارائه دهنده PhysicalFileProvider را از روش سرویس ConfigureServices کلاس راه اندازی نمونه سازی کنیم و می توانیم آن را به عنوان یک وابستگی در سازنده کنترلر تزریق کنیم.
در کد زیر، شیء PhysicalFileProvider را ایجاد کرده و به عنوان وابستگی تزریق کرده ام.
متد ConfigureServices کلاس Startup
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddMvc();
- IFileProvider physicalProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory());
- services.AddSingleton<IFileProvider>(physicalProvider);
- }
HomeController.cs
- using Microsoft.AspNetCore.Mvc;
- using Microsoft.Extensions.FileProviders;
- public class HomeController : Controller
- {
- private readonly IFileProvider _fileProvider;
- public HomeController(IFileProvider fileProvider)
- {
- _fileProvider = fileProvider;
- }
- [Route("home/index")]
- public IActionResult Index()
- {
- var contents = _fileProvider.GetDirectoryContents("");
- return View(contents);
- }
- }
Index.cshtml
- @using Microsoft.Extensions.FileProviders
- @model IDirectoryContents
- <h2>Folder Contents</h2>
- <ul>
- @foreach (IFileInfo item in Model)
- {
- if (item.IsDirectory)
- {
- <li><strong>@item.Name</strong> - Directory</li>
- }
- else
- {
- <li><strong>@item.Name</strong> - @item.PhysicalPath </li>
- }
- }
- </ul>
خروجی
EmbeddedFileProvider
این ارائه دهنده برای دسترسی به فایل هایی که در اسمبلی ها تعبیه شده اند استفاده می شود. ما میتوانیم فایلها را در اسمبلی با استفاده از عنصر "EmbeddedResource" در فایل csproj. (با ویژوال استودیو 2017) جاسازی کنیم. همچنین می توانیم فایل ها را با استفاده از الگوهای globbing مشخص کنیم.