Partager via


Sélecteur de fichiers

Parcourez l’exemple. Parcourir l'exemple

Dans cet article, vous allez apprendre à utiliser l’interface IFilePicker de l’application multiplateforme .NET (.NET MAUI). L’interface IFilePicker vous permet d’inviter l’utilisateur à choisir un ou plusieurs fichiers à partir de l’appareil.

L’implémentation par défaut de l’interface IFilePicker est disponible via la propriété FilePicker.Default. L’espace de noms Microsoft.Maui.Storage contient à la fois l’interface IFilePicker et la classe FilePicker.

Démarrage

Pour accéder à la fonctionnalité FilePicker, vous devez appliquer la configuration spécifique à la plateforme suivante.

Si votre application cible Android 12 ou une version antérieure, vous devez demander l’autorisation READ_EXTERNAL_STORAGE. Si votre application cible Android 13 ou une version ultérieure et qu’elle a besoin d’accéder aux fichiers créés par d’autres applications, vous devez demander une ou plusieurs des autorisations granulaires suivantes au lieu de l’autorisation READ_EXTERNAL_STORAGE :

  • READ_MEDIA_IMAGES
  • READ_MEDIA_VIDEO
  • READ_MEDIA_AUDIO

Ces autorisations peuvent être ajoutées de plusieurs façons, comme indiqué ci-dessous :

  • Ajoutez l’autorisation basée sur l’assembly :

    Ouvrez le fichier Platforms/Android/MainApplication.cs et ajoutez les attributs d’assembly suivants après les directives 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)]
    

    - ou -

  • Mettez à jour le manifeste Android :

    Ouvrez le fichier Plateformes/Android/AndroidManifest.xml et ajoutez le code suivant dans le nœud 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" />    
    

    - ou -

  • Mettez à jour le manifeste Android dans l’éditeur de manifeste :

    Dans Visual Studio, double-cliquez sur le fichier Plateformes/Android/AndroidManifest.xml pour ouvrir l’éditeur de manifeste Android. Ensuite, dans Autorisations requises, activez les autorisations répertoriées ci-dessus. Cela met automatiquement à jour le fichier AndroidManifest.xml.

Important

Toutes les méthodes doivent être appelées sur le thread d’interface utilisateur, car les vérifications d’autorisation et les demandes sont gérées automatiquement par .NET MAUI.

Choisir un fichier

La méthode PickAsync invite l’utilisateur à choisir un fichier à partir de l’appareil. Utilisez le type PickOptions pour spécifier les types de titres et de fichiers autorisés avec le sélecteur. L’exemple suivant illustre l’ouverture du sélecteur et le traitement de l’image sélectionnée :

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

Les types de fichier par défaut sont fournis avec FilePickerFileType.Images, FilePickerFileType.Png et FilePickerFilerType.Videos. Vous pouvez spécifier des types de fichier personnalisés par plateforme, en créant une instance de la classe FilePickerFileType. Le constructeur de cette classe prend un dictionnaire qui est indexé par le type DevicePlatform pour identifier la plateforme. La valeur de la clé de dictionnaire est une collection de chaînes représentant les types de fichier. Par exemple, voici comment indiquer des types de fichier Comic spécifiques :

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

La recherche de fichiers en fonction du type de fichier peut être différente d’une plateforme à l’autre. Pour en savoir plus, consultez Différences selon les plateformes.

Sélectionner plusieurs fichiers

Si vous souhaitez que l’utilisateur sélectionne plusieurs fichiers, appelez la méthode FilePicker.PickMultipleAsync. Cette méthode prend également un paramètre PickOptions pour spécifier des informations supplémentaires. Les résultats sont les mêmes que PickAsync, mais au lieu du type FileResult retourné, un type IEnumerable<FileResult> est retourné avec tous les fichiers sélectionnés.

Conseil

La propriété FullPath ne retourne pas toujours le chemin d’accès physique au fichier. Utilisez la méthode OpenReadAsync pour obtenir le fichier.

Différences selon les plateformes

Cette section décrit les différences propres à la plateforme avec le sélecteur de fichiers.

PickOptions.PickerTitle s’affiche dans l’invite initiale adressée à l’utilisateur, mais pas dans la boîte de dialogue du sélecteur.

Lorsque vous filtrez des fichiers par type, utilisez le type MIME du fichier. Pour obtenir la liste des types MIME, consultez Mozilla - Common MIME types.