Seletor de arquivos

Browse sample. Navegue pelo exemplo

Este artigo descreve como você pode usar a interface .NET Multi-platform App UI (.NET MAUI). IFilePicker Com a IFilePicker interface, você pode solicitar que o usuário escolha um ou mais arquivos do dispositivo.

A implementação padrão da interface está disponível por meio da IFilePickerFilePicker.Default propriedade. A interface e FilePicker a IFilePicker classe estão contidas no Microsoft.Maui.Storage namespace.

Introdução

Para acessar a funcionalidade, é necessária a seguinte configuração específica da FilePicker plataforma.

Se o seu aplicativo tiver como alvo o Android 12 ou inferior, você deverá solicitar a READ_EXTERNAL_STORAGE permissão. Se seu aplicativo tiver como alvo o Android 13 ou superior e precisar de acesso a arquivos criados por outros aplicativos, você deverá solicitar uma ou mais das seguintes permissões granulares em vez da READ_EXTERNAL_STORAGE permissão:

  • READ_MEDIA_IMAGES
  • READ_MEDIA_VIDEO
  • READ_MEDIA_AUDIO

Essas permissões podem ser adicionadas das seguintes maneiras:

  • Adicione a permissão baseada em assembly:

    Abra o arquivo Platforms/Android/MainApplication.cs e adicione os seguintes atributos de assembly após using as diretivas:

    [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)]
    

    - ou -

  • Atualize o manifesto do Android:

    Abra o arquivo Platforms/Android/AndroidManifest.xml e adicione o manifest seguinte no nó:

    <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" />    
    

    - ou -

  • Atualize o manifesto do Android no editor de manifesto:

    No Visual Studio, clique duas vezes no arquivo Platforms/Android/AndroidManifest.xml para abrir o editor de manifesto do Android. Em seguida, em Permissões necessárias, verifique as permissões listadas acima. Isso atualizará automaticamente o arquivo AndroidManifest.xml.

Importante

Todos os métodos devem ser chamados no thread da interface do usuário porque as verificações de permissão e as solicitações são manipuladas automaticamente pelo .NET MAUI.

Escolha um arquivo

O PickAsync método solicita que o usuário escolha um arquivo do dispositivo. Use o tipo para especificar o título e os tipos de arquivo permitidos com o PickOptions seletor. O exemplo a seguir demonstra a abertura do seletor e o processamento da imagem selecionada:

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;
}

Os tipos de arquivo padrão são fornecidos com FilePickerFileType.Images, FilePickerFileType.Pnge FilePickerFilerType.Videos. Você pode especificar tipos de arquivo personalizados por plataforma, criando uma instância da FilePickerFileType classe. O construtor dessa classe usa um dicionário que é digitado DevicePlatform pelo tipo para identificar a plataforma. O valor da chave de dicionário é uma coleção de cadeias de caracteres que representam os tipos de arquivo. Por exemplo, veja como você especificaria tipos de arquivos de quadrinhos específicos:

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,
};

A pesquisa de arquivos com base no tipo de arquivo pode ser diferente de uma plataforma para a outra. Para obter mais informações, consulte Diferenças de plataforma.

Escolha vários arquivos

Se você quiser que o usuário escolha vários arquivos, chame o FilePicker.PickMultipleAsync método. Esse método também usa um PickOptions parâmetro para especificar informações adicionais. Os resultados são os mesmos que PickAsync, mas em vez do FileResult tipo retornado, um IEnumerable<FileResult> tipo é retornado com todos os arquivos selecionados.

Dica

A FullPath propriedade nem sempre retorna o caminho físico para o arquivo. Para obter o arquivo, use o OpenReadAsync método.

Diferenças de plataforma

Esta seção descreve as diferenças específicas da plataforma com o seletor de arquivos.

O PickOptions.PickerTitle é exibido no prompt inicial para o usuário, mas não na caixa de diálogo do seletor em si.

Ao filtrar arquivos por tipo, use o tipo MIME do arquivo. Para obter uma lista de tipos MIME, consulte Mozilla - Tipos MIME comuns.