Средство выбора файлов

Browse sample. Обзор примера

В этой статье описывается, как использовать интерфейс многоплатформенного приложения .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.