Freigeben über


Dateiauswahl

Beispiel durchsuchen.Durchsuchen Sie das Beispiel

In diesem Artikel wird beschrieben, wie Sie die .NET Multi-Platform App UI (.NET MAUI) IFilePicker-Schnittstelle verwenden können. Mit der IFilePicker-Schnittstelle können Sie den Benutzer auffordern, eine oder mehrere Dateien vom Gerät aus zu wählen.

Die Standardimplementierung der IFilePicker-Schnittstelle ist über die FilePicker.Default-Eigenschaft verfügbar. Sowohl die IFilePicker-Schnittstelle als auch die FilePicker-Klasse sind im Microsoft.Maui.Storage-Namespace enthalten.

Erste Schritte

Um auf die Funktion FilePicker zugreifen zu können, ist die folgende plattformspezifische Einrichtung erforderlich.

Wenn Ihre App auf Android 12 oder niedriger ausgerichtet ist, müssen Sie die Berechtigung READ_EXTERNAL_STORAGE anfordern. Wenn Ihre App auf Android 13 oder höher ausgerichtet ist und Zugriff auf Dateien benötigt, die andere Apps erstellt haben, müssen Sie eine oder mehrere der folgenden differenzierten Berechtigungen anstelle der Berechtigung READ_EXTERNAL_STORAGE-anfordern:

  • READ_MEDIA_IMAGES
  • READ_MEDIA_VIDEO
  • READ_MEDIA_AUDIO

Diese Berechtigungen können auf folgende Weise hinzugefügt werden:

  • Fügen Sie die assemblybasierte Berechtigung hinzu:

    Öffnen Sie die Datei Platforms/Android/MainApplication.cs und fügen Sie die folgenden Assembly-Attribute nach den using-Anweisungen hinzu:

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

    – oder –

  • Aktualisieren des Android-Manifests

    Öffnen Sie die Datei Platforms/Android/AndroidManifest.xml und fügen Sie Folgendes im Knoten manifest hinzu:

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

    - oder -

  • Aktualisieren Sie das Android-Manifest im Manifest-Editor:

    Doppelklicken Sie in Visual Studio auf die Datei Platforms/Android/AndroidManifest.xml, um den Android-Manifest-Editor zu öffnen. Überprüfen Sie dann unter Erforderliche Berechtigungen die oben aufgeführten Berechtigungen. Dadurch wird die Datei AndroidManifest.xml automatisch aktualisiert.

Wichtig

Alle Methoden müssen im UI-Thread aufgerufen werden, weil Überprüfungen und Anfragen von Berechtigungen automatisch von .NET MAUI behandelt werden.

Auswählen einer Datei

Die PickAsync-Methode fordert den Benutzer auf, eine Datei vom Gerät auszuwählen. Verwenden Sie den Typ PickOptions, um die für die Auswahl zulässigen Titel und Dateitypen anzugeben. Im folgenden Beispiel wird das Öffnen der Auswahl und die Verarbeitung des ausgewählten Bilds veranschaulicht:

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

Standarddateitypen werden mit FilePickerFileType.Images, FilePickerFileType.Png und FilePickerFilerType.Videos angegeben. Sie können benutzerdefinierte Dateitypen pro Plattform angeben, indem Sie eine Instanz der FilePickerFileType-Klasse erstellen. Der Konstruktor dieser Klasse nimmt ein Wörterbuch, das durch den DevicePlatform-Typ verschlüsselt ist, um die Plattform zu identifizieren. Der Wert des Wörterbuchschlüssels ist eine Sammlung von Zeichenfolgen, die die Dateitypen darstellen. So können Sie zum Beispiel bestimmte Comic-Dateitypen angeben:

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

Die Suche nach Dateien basierend auf dem Dateityp unterscheidet sich möglicherweise von einer Plattform zum anderen. Weitere Informationen finden Sie unter Plattformunterschiede.

Auswählen mehrerer Dateien

Wenn Sie möchten, dass Benutzer mehrere Dateien auswählen können, rufen Sie die FilePicker.PickMultipleAsync-Methode auf. Diese Methode nimmt auch einen PickOptions-Parameter an, um zusätzliche Informationen anzugeben. Das Ergebnis ist dasselbe wie bei PickAsync, aber anstelle des zurückgegebenen Typs FileResult wird ein Typ IEnumerable<FileResult> mit allen ausgewählten Dateien zurückgegeben.

Tipp

Die Eigenschaft FullPath gibt nicht immer den physischen Pfad zur Datei zurück. Um die Datei abzurufen, verwenden Sie die OpenReadAsync-Methode.

Plattformunterschiede

In diesem Abschnitt werden die plattformspezifischen Unterschiede bei der Dateiauswahl beschrieben.

Das PickOptions.PickerTitle wird bei der ersten Aufforderung an die Benutzer angezeigt, aber nicht im Auswahldialog selbst.

Verwenden Sie beim Filtern von Dateien nach Typ den MIME-Typ der Datei. Eine Liste der MIME-Typen finden Sie unter Mozilla – Allgemeine MIME-Typen.