Seletor de arquivos
Este artigo descreve como você pode usar a interface .NET Multi-platform App UI (.NET MAUI). IFilePicker
Com a IFilePicker
interface, você pode solicitar que o usuário escolha um ou mais arquivos do dispositivo.
A implementação padrão da interface está disponível por meio da IFilePicker
FilePicker.Default
propriedade. A interface e FilePicker
a IFilePicker
classe estão contidas no Microsoft.Maui.Storage
namespace.
Introdução
Para acessar a funcionalidade, é necessária a seguinte configuração específica da FilePicker plataforma.
Se o seu aplicativo tiver como alvo o Android 12 ou inferior, você deverá solicitar a READ_EXTERNAL_STORAGE
permissão. Se seu aplicativo tiver como alvo o Android 13 ou superior e precisar de acesso a arquivos criados por outros aplicativos, você deverá solicitar uma ou mais das seguintes permissões granulares em vez da READ_EXTERNAL_STORAGE
permissão:
READ_MEDIA_IMAGES
READ_MEDIA_VIDEO
READ_MEDIA_AUDIO
Essas permissões podem ser adicionadas das seguintes maneiras:
Adicione a permissão baseada em assembly:
Abra o arquivo Platforms/Android/MainApplication.cs e adicione os seguintes atributos de assembly após
using
as diretivas:[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 -
Atualize o manifesto do Android:
Abra o arquivo Platforms/Android/AndroidManifest.xml e adicione o
manifest
seguinte no nó:<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 -
Atualize o manifesto do Android no editor de manifesto:
No Visual Studio, clique duas vezes no arquivo Platforms/Android/AndroidManifest.xml para abrir o editor de manifesto do Android. Em seguida, em Permissões necessárias, verifique as permissões listadas acima. Isso atualizará automaticamente o arquivo AndroidManifest.xml.
Importante
Todos os métodos devem ser chamados no thread da interface do usuário porque as verificações de permissão e as solicitações são manipuladas automaticamente pelo .NET MAUI.
Escolha um arquivo
O PickAsync
método solicita que o usuário escolha um arquivo do dispositivo. Use o tipo para especificar o título e os tipos de arquivo permitidos com o PickOptions
seletor. O exemplo a seguir demonstra a abertura do seletor e o processamento da imagem selecionada:
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;
}
Os tipos de arquivo padrão são fornecidos com FilePickerFileType.Images
, FilePickerFileType.Png
e FilePickerFilerType.Videos
. Você pode especificar tipos de arquivo personalizados por plataforma, criando uma instância da FilePickerFileType
classe. O construtor dessa classe usa um dicionário que é digitado DevicePlatform
pelo tipo para identificar a plataforma. O valor da chave de dicionário é uma coleção de cadeias de caracteres que representam os tipos de arquivo. Por exemplo, veja como você especificaria tipos de arquivos de quadrinhos específicos:
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,
};
A pesquisa de arquivos com base no tipo de arquivo pode ser diferente de uma plataforma para a outra. Para obter mais informações, consulte Diferenças de plataforma.
Escolha vários arquivos
Se você quiser que o usuário escolha vários arquivos, chame o FilePicker.PickMultipleAsync
método. Esse método também usa um PickOptions
parâmetro para especificar informações adicionais. Os resultados são os mesmos que PickAsync
, mas em vez do FileResult
tipo retornado, um IEnumerable<FileResult>
tipo é retornado com todos os arquivos selecionados.
Dica
A FullPath propriedade nem sempre retorna o caminho físico para o arquivo. Para obter o arquivo, use o OpenReadAsync método.
Diferenças de plataforma
Esta seção descreve as diferenças específicas da plataforma com o seletor de arquivos.
O PickOptions.PickerTitle
é exibido no prompt inicial para o usuário, mas não na caixa de diálogo do seletor em si.
Ao filtrar arquivos por tipo, use o tipo MIME do arquivo. Para obter uma lista de tipos MIME, consulte Mozilla - Tipos MIME comuns.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários