Dosya seçici

Browse sample. Örneğe göz atın

Bu makalede .NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) IFilePicker arabirimini nasıl kullanabileceğiniz açıklanmaktadır. Arabirimle IFilePicker , kullanıcıdan cihazdan bir veya daha fazla dosya seçmesini isteyebilirsiniz.

Arabirimin IFilePicker varsayılan uygulaması özelliği aracılığıyla FilePicker.Default kullanılabilir. IFilePicker Hem arabirim hem FilePicker de sınıf ad alanında Microsoft.Maui.Storage yer alır.

Başlarken

İşlevlere FilePicker erişmek için aşağıdaki platforma özgü kurulum gereklidir.

Uygulamanız Android 12 veya daha düşük bir sürüme sahipse, izin istemeniz READ_EXTERNAL_STORAGE gerekir. Uygulamanız Android 13 veya üzerini hedeflediyse ve diğer uygulamaların oluşturduğu dosyalara erişmesi gerekiyorsa, izin yerine READ_EXTERNAL_STORAGE aşağıdaki ayrıntılı izinlerden birini veya daha fazlasını istemeniz gerekir:

  • READ_MEDIA_IMAGES
  • READ_MEDIA_VIDEO
  • READ_MEDIA_AUDIO

Bu izinler aşağıdaki yollarla eklenebilir:

  • Derleme tabanlı izni ekleyin:

    Platforms/Android/MainApplication.cs dosyasını açın ve yönergelerin ardından using aşağıdaki derleme özniteliklerini ekleyin:

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

    - veya -

  • Android Bildirimini güncelleştirin:

    Platforms/Android/AndroidManifest.xml dosyasını açın ve düğüme manifest aşağıdakileri ekleyin:

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

    - veya -

  • Bildirim düzenleyicisinde Android Bildirimi'ni güncelleştirin:

    Visual Studio'da Platformlar/Android/AndroidManifest.xml dosyasına çift tıklayarak Android bildirim düzenleyicisini açın. Ardından, Gerekli izinler'in altında yukarıda listelenen izinleri denetleyin. Bu, AndroidManifest.xml dosyasını otomatik olarak güncelleştirir.

Önemli

İzin denetimleri ve istekleri .NET MAUI tarafından otomatik olarak işlenmek için tüm yöntemlerin kullanıcı arabirimi iş parçacığında çağrılmalıdır.

Bir dosya seçin

yöntemi, PickAsync kullanıcıdan cihazdan bir dosya seçmesini ister. Seçici ile PickOptions izin verilen başlık ve dosya türlerini belirtmek için türünü kullanın. Aşağıdaki örnekte seçicinin açılması ve seçili görüntünün işlenmesi gösterilmektedir:

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

Varsayılan dosya türleri , FilePickerFileType.Pngve FilePickerFilerType.Videosile FilePickerFileType.Imagessağlanır. Sınıfının bir örneğini FilePickerFileType oluşturarak platform başına özel dosya türleri belirtebilirsiniz. Bu sınıfın oluşturucu, platformu tanımlamak için türü tarafından DevicePlatform anahtarlanan bir sözlük alır. Sözlük anahtarının değeri, dosya türlerini temsil eden bir dize koleksiyonudur. Örneğin, belirli çizgi roman dosya türlerini şu şekilde belirtebilirsiniz:

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

Dosya türüne göre dosya aramak bir platformdan diğerine farklı olabilir. Daha fazla bilgi için bkz . Platform farklılıkları.

Birden çok dosya seçme

Kullanıcının birden çok dosya seçmesini istiyorsanız yöntemini çağırın FilePicker.PickMultipleAsync . Bu yöntem ayrıca ek bilgi belirtmek için bir PickOptions parametre alır. Sonuçlar ile aynıdır PickAsync, ancak döndürülen tür yerine FileResult , seçilen dosyaların tümüyle bir IEnumerable<FileResult> tür döndürülür.

Bahşiş

FullPath özelliği her zaman dosyanın fiziksel yolunu döndürmez. Dosyayı almak için yöntemini kullanın OpenReadAsync .

Platform farklılıkları

Bu bölümde, dosya seçici ile platforma özgü farklar açıklanmaktadır.

PickOptions.PickerTitle, kullanıcıya ilk istemde görüntülenir, ancak seçici iletişim kutusunun kendisinde görüntülenmez.

Dosyaları türe göre filtrelerken dosyanın MIME türünü kullanın. MIME türlerinin listesi için bkz . Mozilla - Yaygın MIME türleri.