Udostępnij za pośrednictwem


Selektor plików

Przeglądaj przykład. Przeglądanie przykładu

W tym artykule opisano sposób używania interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI). IFilePicker Za pomocą interfejsu IFilePicker możesz monitować użytkownika o wybranie co najmniej jednego pliku z urządzenia.

Domyślna implementacja interfejsu IFilePicker jest dostępna za pośrednictwem FilePicker.Default właściwości . Zarówno interfejs, jak IFilePicker i FilePicker klasa są zawarte w Microsoft.Maui.Storage przestrzeni nazw.

Rozpocznij

Aby uzyskać dostęp do FilePicker funkcji, wymagana jest następująca konfiguracja specyficzna dla platformy.

Jeśli aplikacja jest przeznaczona READ_EXTERNAL_STORAGE dla systemu Android 12 lub starszego, musisz zażądać uprawnienia. Jeśli aplikacja jest przeznaczona dla systemu Android 13 lub nowszego i wymaga dostępu do plików utworzonych przez inne aplikacje, musisz zażądać co najmniej jednego z następujących szczegółowych uprawnień zamiast READ_EXTERNAL_STORAGE uprawnień:

  • READ_MEDIA_IMAGES
  • READ_MEDIA_VIDEO
  • READ_MEDIA_AUDIO

Te uprawnienia można dodać w następujący sposób:

  • Dodaj uprawnienie oparte na zestawie:

    Otwórz plik Platformy/Android/MainApplication.cs i dodaj następujące atrybuty zestawu po using dyrektywach:

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

    - lub -

  • Zaktualizuj manifest systemu Android:

    Otwórz plik Platformy/Android/AndroidManifest.xml i dodaj następujący kod w węźlemanifest:

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

    - lub -

  • Zaktualizuj manifest systemu Android w edytorze manifestu:

    W programie Visual Studio kliknij dwukrotnie plik Platformy/Android/AndroidManifest.xml , aby otworzyć edytor manifestu systemu Android. Następnie w obszarze Wymagane uprawnienia sprawdź uprawnienia wymienione powyżej. Spowoduje to automatyczne zaktualizowanie pliku AndroidManifest.xml .

Ważne

Wszystkie metody muszą być wywoływane w wątku interfejsu użytkownika, ponieważ kontrole uprawnień i żądania są automatycznie obsługiwane przez program .NET MAUI.

Wybierz plik

Metoda PickAsync monituje użytkownika o wybranie pliku z urządzenia. PickOptions Użyj typu , aby określić tytuł i typy plików dozwolone za pomocą selektora. W poniższym przykładzie pokazano otwarcie selektora i przetworzenie wybranego obrazu:

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

Domyślne typy plików są dostarczane z elementami FilePickerFileType.Images, FilePickerFileType.Pngi FilePickerFilerType.Videos. Można określić niestandardowe typy plików na platformę, tworząc wystąpienie FilePickerFileType klasy. Konstruktor tej klasy przyjmuje słownik, który jest kluczem typu DevicePlatform w celu zidentyfikowania platformy. Wartość klucza słownika jest kolekcją ciągów reprezentujących typy plików. Na przykład poniżej przedstawiono sposób określania określonych typów plików komiksowych:

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

Wyszukiwanie plików na podstawie typu pliku może różnić się od jednej platformy do drugiej. Aby uzyskać więcej informacji, zobacz Różnice między platformami.

Wybierz wiele plików

Jeśli chcesz, aby użytkownik wybrał wiele plików, wywołaj metodę FilePicker.PickMultipleAsync . Ta metoda przyjmuje PickOptions również parametr w celu określenia dodatkowych informacji. Wyniki są takie same jak PickAsync, ale zamiast FileResult zwracanego typu zwracany IEnumerable<FileResult> jest typ ze wszystkimi wybranymi plikami.

Napiwek

Właściwość FullPath nie zawsze zwraca ścieżkę fizyczną do pliku. Aby pobrać plik, użyj OpenReadAsync metody .

Różnice między platformami

W tej sekcji opisano różnice specyficzne dla platformy w selektorze plików.

Element PickOptions.PickerTitle jest wyświetlany w początkowym monicie dla użytkownika, ale nie w samym oknie dialogowym selektora.

Podczas filtrowania plików według typu użyj typu MIME pliku. Aby uzyskać listę typów MIME, zobacz Mozilla — typowe typy MIME.