Часто наши приложения Blazor Hybrid используют какие-либо статические файлы для работы. Это могут быть картинки, текстовые файлы, аудиозаписи и т.д. В этой части мы рассмотрим то, как мы можем использовать такие файлы в нашем приложении
Необработанные ресурсы
Ресурсы проекта Blazor Hybrid размещаются в папке Resources
, которая, в свою очередь, содержит дочерние папки, каждая из которых используется для хранения ресурсов определенного вида — шрифты, иконки приложения и так далее. При этом, в папке Resources/Raw
мы можем хранить так называемые необработанные ресурсы для нашего приложения. В качестве примера, в этой папке по умолчанию располагается текстовый файл AboutAssets.txt
, в котором дается краткая справка по работе с ресурсами из папки Resources/Raw
. Попробуем воспользоваться этой инструкцией в нашем приложении.
Создадим новое приложение Blazor Hybrid и изменим код компонента Home
следующим образом:
@page "/" <p>@content</p> @code{ string content = ""; protected override async Task OnInitializedAsync() { await LoadMauiAsset(); } async Task LoadMauiAsset() { using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt"); using var reader = new StreamReader(stream); content = reader.ReadToEnd(); } }
После запуска приложения вы увидите на экране содержимое файла:
Разберемся с этим примером подробно. Здесь мы используем для получения потока (Stream
) метод класса FileSystem.OpenAppPackageFileAsync()
. Класс FileSystem
— это класс из пространства имен Microsoft.
Свойство | Тип | Описание |
App |
string |
Возвращает расположение, в котором могут храниться данные приложения. |
Cache |
string |
Возвращает расположение, в котором могут храниться временные данные. |
Current |
IFileSystem |
Предоставляет реализацию интерфейса по умолчанию. |
а также два метода:
Метод | Тип | Описание |
App |
Task<bool> |
Определяет, существует ли файл в пакете приложения. |
Open |
Task<Stream> |
Открывает файл, содержащийся в пакете приложения и возвращает объект типа Stream . |
Таким образом, используя Open
мы можем получать доступ к различны файлам, расположенным в пакете приложения.
Все ресурсы расположенные в папке Resources/Raw
копируются непосредственно в выходной каталог (пакет) приложения. Например, создайте новый файл с именем AboutAssets2.txt и перенесите его на папку Resources/Raw
в Visual Studio. В свойствах этого файла вы увидите:
теперь соберите приложение и убедитесь, что файл расположен в корне папки приложения в Windows:
Доступ к файлам из папки wwwroot
Для проекта Blazor Hybrid папка Resources/Raw
не единственная в которой могут храниться статические файлы. Так, например, компоненты Razor при работе со статическими файлами используют специальную папку wwwroot
проекта:
Используя всё тот же класс
FileSystem
мы можем получать доступ к статическим файлам из папки wwwroot
и всех её подкаталогов. Например, изменим код компонента Home
следующим образом:
@page "/" <button @onclick="LoadIndex">app.css</button> <p>@content</p> @code{ string content = ""; async void LoadIndex() { content = await LoadFromWwwRoot("wwwroot/css/app.css"); } async Task<string> LoadFromWwwRoot(string filename) { using var stream = await FileSystem.OpenAppPackageFileAsync(filename); using var reader = new StreamReader(stream); return reader.ReadToEnd(); } }
Здесь мы, используя метод OpenAppPackageFileAsync()
, получаем доступ к файлу app.css. После запуска приложения, кликните по кнопке «app.css» и вы увидите, содержимое этого файла:
Итого
В проекте Blazor Hybrid статические файлы могут располагаться как в папке wwwroot
(как и во всех проектах Blazor), так и в папке Resources/Raw
(необработанные ресурсы). Чтобы получить доступ к содержимому этих файлов мы можем использовать метод класса FileSystem
.