Condividi tramite


Selezione file

Sfogliare l'esempio. Esplorare l'esempio

Questo articolo descrive come usare l'interfaccia dell'interfaccia utente dell'app multipiattaforma .NET (.NET MAUI). IFilePicker Con l'interfaccia IFilePicker è possibile richiedere all'utente di selezionare uno o più file dal dispositivo.

L'implementazione predefinita dell'interfaccia IFilePicker è disponibile tramite la FilePicker.Default proprietà . Sia l'interfaccia che FilePicker la IFilePicker classe sono contenute nello spazio dei Microsoft.Maui.Storage nomi .

Operazioni preliminari

Per accedere alla FilePicker funzionalità, è necessaria la configurazione specifica della piattaforma seguente.

Se l'app è destinata ad Android 12 o versione precedente, è necessario richiedere l'autorizzazione READ_EXTERNAL_STORAGE . Se l'app è destinata ad Android 13 o versione successiva e deve accedere ai file creati da altre app, è necessario richiedere una o più delle autorizzazioni granulari seguenti anziché l'autorizzazione READ_EXTERNAL_STORAGE :

  • READ_MEDIA_IMAGES
  • READ_MEDIA_VIDEO
  • READ_MEDIA_AUDIO

Queste autorizzazioni possono essere aggiunte nei modi seguenti:

  • Aggiungere l'autorizzazione basata su assembly:

    Aprire il file Platforms/Android/MainApplication.cs e aggiungere gli attributi assembly seguenti dopo using le direttive:

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

    o

  • Aggiornare il manifesto Android:

    Aprire il file Platforms/Android/AndroidManifest.xml e aggiungere quanto segue nel manifest nodo:

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

    o

  • Aggiornare il manifesto Android nell'editor del manifesto:

    In Visual Studio fare doppio clic sul file Platforms/Android/AndroidManifest.xml per aprire l'editor del manifesto Android. Quindi, in Autorizzazioni necessarie controllare le autorizzazioni elencate in precedenza. Il file AndroidManifest.xml verrà aggiornato automaticamente.

Importante

Tutti i metodi devono essere chiamati nel thread dell'interfaccia utente perché i controlli delle autorizzazioni e le richieste vengono gestiti automaticamente da .NET MAUI.

Selezionare un file

Il PickAsync metodo richiede all'utente di selezionare un file dal dispositivo. Usare il PickOptions tipo per specificare il titolo e i tipi di file consentiti con la selezione. L'esempio seguente illustra l'apertura della selezione e l'elaborazione dell'immagine selezionata:

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

I tipi di file predefiniti vengono forniti con FilePickerFileType.Images, FilePickerFileType.Pnge FilePickerFilerType.Videos. È possibile specificare tipi di file personalizzati per ogni piattaforma creando un'istanza della FilePickerFileType classe . Il costruttore di questa classe accetta un dizionario con chiave dal DevicePlatform tipo per identificare la piattaforma. Il valore della chiave del dizionario è una raccolta di stringhe che rappresentano i tipi di file. Ad esempio, ecco come specificare tipi di file comici specifici:

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 ricerca di file in base al tipo di file può essere diversa da una piattaforma all'altra. Per altre informazioni, vedere Differenze della piattaforma.

Selezionare più file

Se si desidera che l'utente scegli più file, chiamare il FilePicker.PickMultipleAsync metodo . Questo metodo accetta anche un PickOptions parametro per specificare informazioni aggiuntive. I risultati sono uguali a PickAsync, ma invece del FileResult tipo restituito, viene restituito un IEnumerable<FileResult> tipo con tutti i file selezionati.

Suggerimento

La FullPath proprietà non restituisce sempre il percorso fisico del file. Per ottenere il file, usare il OpenReadAsync metodo .

Differenze tra le piattaforme

Questa sezione descrive le differenze specifiche della piattaforma con la selezione file.

L'oggetto PickOptions.PickerTitle viene visualizzato al prompt iniziale dell'utente, ma non nella finestra di dialogo di selezione stessa.

Quando si filtrano i file per tipo, usare il tipo MIME del file. Per un elenco dei tipi MIME, vedere Mozilla - Tipi MIME comuni.