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

Автор:

learn.microsoft.com

Класс FilePicker позволяет пользователю выбирать один или несколько файлов с устройства.

Начало работы

Чтобы начать использовать этот API, прочитайте руководство по началу работы с Xamarin.Essentials и убедитесь, что библиотека правильно установлена и настроена в ваших проектах.

Для доступа к функциям FilePicker требуется следующая настройка, специфичная для данной платформы.

Android

Дополнительная настройка не требуется.

iOS

Чтобы включить возможности iCloud в файлообменнике на iOS, выполните следующие действия.

UWP

Дополнительная настройка не требуется.

Совет. Все методы должны вызываться в потоке пользовательского интерфейса, поскольку проверка и запрос разрешений автоматически обрабатываются Xamarin.Essentials.

Выбор файла

Метод FilePicker.PickAsync() позволяет пользователю выбрать файл с устройства. При вызове метода вы можете задать различные PickOptions, позволяющие указать отображаемый заголовок и типы файлов, которые может выбрать пользователь. По умолчанию

async Task PickAndShow(PickOptions options)
{
   try
   {
       var result = await FilePicker.PickAsync(options);
       if (result != null)
       {
           Text = $"File Name: {result.FileName}";
           if (result.FileName.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) ||
               result.FileName.EndsWith("png", StringComparison.OrdinalIgnoreCase))
           {
               var stream = await result.OpenReadAsync();
               Image = ImageSource.FromStream(() => stream);
           }
       }
       
       return result;
   }
   catch (Exception ex)
   {
       // The user canceled or something went wrong
   }
   
   return null;
}

Типы файлов по умолчанию представлены FilePickerFileType.Images, FilePickerFileType.Png и FilePickerFilerType.Videos. При создании PickOptions можно указать пользовательские типы файлов, которые могут быть настроены для каждой платформы. Например, вот как можно указать конкретные типы файлов комиксов:

var customFileType =
   new FilePickerFileType(new Dictionary<_DevicePlatform2c_>>
   {
       { DevicePlatform.iOS, new[] { "public.my.comic.extension" } }, // or general UTType values
       { DevicePlatform.Android, new[] { "application/comics" } },
       { DevicePlatform.UWP, new[] { ".cbr", ".cbz" } },
       { DevicePlatform.Tizen, new[] { "*/*" } },
       { DevicePlatform.macOS, new[] { "cbr", "cbz" } }, // or general UTType values
   });
var options = new PickOptions
{
   PickerTitle = "Please select a comic file",
   FileTypes = customFileType,
};

Выбор нескольких файлов

Если вы хотите, чтобы пользователь мог выбрать несколько файлов, можно вызвать метод FilePicker.PickMultipleAsync(). Он также принимает в качестве параметра PickOptions для указания дополнительной информации. Результаты работы аналогичны PickAsync, но вместо одного результата FileResult возвращается IEnumerable, по которому можно выполнять итерации.

Совет. Свойство FullPath не всегда возвращает физический путь к файлу. Чтобы получить файл, используйте метод OpenReadAsync.

Различия в платформах

Различия в платформах отсутствуют.

API

Исходный код FilePicker

Документация по API FilePicker

Материалы по теме