Средство выбора файлов
В этой статье описывается, как использовать интерфейс многоплатформенного приложения .NET (.NET MAUI). IFilePicker
IFilePicker
С помощью интерфейса пользователь может выбрать один или несколько файлов с устройства.
Реализация интерфейса по умолчанию IFilePicker
доступна через FilePicker.Default
свойство. Интерфейс IFilePicker
и FilePicker
класс содержатся в Microsoft.Maui.Storage
пространстве имен.
Начать
Для доступа к FilePicker функциям требуется следующая настройка для конкретной платформы.
Если приложение предназначено для Android 12 или более поздней версии, необходимо запросить READ_EXTERNAL_STORAGE
разрешение. Если приложение предназначено для Android 13 или более поздней версии и нуждается в доступе к файлам, созданным другими приложениями, необходимо запросить одно или несколько следующих подробных разрешений вместо READ_EXTERNAL_STORAGE
разрешения:
READ_MEDIA_IMAGES
READ_MEDIA_VIDEO
READ_MEDIA_AUDIO
Эти разрешения можно добавить следующим образом:
Добавьте разрешение на основе сборки:
Откройте файл Platform/Android/MainApplication.cs и добавьте следующие атрибуты сборки после
using
директив:[assembly: UsesPermission(Android.Manifest.Permission.ReadExternalStorage, MaxSdkVersion = 32)] [assembly: UsesPermission(Android.Manifest.Permission.ReadMediaAudio)] [assembly: UsesPermission(Android.Manifest.Permission.ReadMediaImages)] [assembly: UsesPermission(Android.Manifest.Permission.ReadMediaVideo)]
- или -
Обновите манифест Android:
Откройте файл Platform/Android/AndroidManifest.xml и добавьте в узел следующее
manifest
:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <!-- Required only if your app needs to access images or photos that other apps created --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <!-- Required only if your app needs to access videos that other apps created --> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <!-- Required only if your app needs to access audio files that other apps created --> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
- или -
Обновите манифест Android в редакторе манифеста:
В Visual Studio дважды щелкните файл Platform/Android/AndroidManifest.xml , чтобы открыть редактор манифеста Android. Затем в разделе "Необходимые разрешения" проверка указанные выше разрешения. Это действие автоматически обновляет файл AndroidManifest.xml.
Важно!
Все методы должны вызываться в потоке пользовательского интерфейса, так как разрешения проверка и запросы автоматически обрабатываются .NET MAUI.
Выбор файла
Метод PickAsync
предложит пользователю выбрать файл с устройства. PickOptions
Используйте тип, чтобы указать заголовки и типы файлов, разрешенные с помощью средства выбора. В следующем примере показано открытие средства выбора и обработка выбранного изображения:
public async Task<FileResult> PickAndShow(PickOptions options)
{
try
{
var result = await FilePicker.Default.PickAsync(options);
if (result != null)
{
if (result.FileName.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) ||
result.FileName.EndsWith("png", StringComparison.OrdinalIgnoreCase))
{
using var stream = await result.OpenReadAsync();
var image = ImageSource.FromStream(() => stream);
}
}
return result;
}
catch (Exception ex)
{
// The user canceled or something went wrong
}
return null;
}
Типы файлов по умолчанию предоставляются с помощью FilePickerFileType.Images
, FilePickerFileType.Png
и FilePickerFilerType.Videos
. Вы можете указать пользовательские типы файлов для каждой FilePickerFileType
платформы, создав экземпляр класса. Конструктор этого класса принимает словарь, который определяется DevicePlatform
типом для идентификации платформы. Значение ключа словаря — это коллекция строк, представляющих типы файлов. Например, вот как указать определенные типы файлов комиксов:
var customFileType = new FilePickerFileType(
new Dictionary<DevicePlatform, IEnumerable<string>>
{
{ DevicePlatform.iOS, new[] { "public.my.comic.extension" } }, // UTType values
{ DevicePlatform.Android, new[] { "application/comics" } }, // MIME type
{ DevicePlatform.WinUI, new[] { ".cbr", ".cbz" } }, // file extension
{ DevicePlatform.Tizen, new[] { "*/*" } },
{ DevicePlatform.macOS, new[] { "cbr", "cbz" } }, // UTType values
});
PickOptions options = new()
{
PickerTitle = "Please select a comic file",
FileTypes = customFileType,
};
Поиск файлов на основе типа файла может отличаться от одной платформы от другой. Дополнительные сведения см. в разделе "Различия платформы".
Выбор нескольких файлов
Если вы хотите, чтобы пользователь выбрал несколько файлов, вызовите FilePicker.PickMultipleAsync
метод. Этот метод также принимает параметр для указания дополнительных сведений PickOptions
. Результаты совпадают с PickAsync
результатами, но вместо FileResult
возвращаемого IEnumerable<FileResult>
типа возвращается тип со всеми выбранными файлами.
Совет
Свойство FullPath не всегда возвращает физический путь к файлу. Чтобы получить файл, используйте метод OpenReadAsync.
Различия между платформами
В этом разделе описываются различия платформы с средством выбора файлов.
Отображается PickOptions.PickerTitle
в исходном запросе пользователя, но не в самом диалоговом окне выбора.
При фильтрации файлов по типу используйте тип MIME файла. Список типов MIME см. в разделе Mozilla — распространенные типы MIME.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по