Xamarin.Essentials:文件选取器

通过 FilePicker 类,用户可以从设备中选取单个或多个文件。

入门

若要开始使用此 API,请阅读 Xamarin.Essentials 的入门指南,确保在项目中正确安装和设置库。

若要访问 FilePicker 功能,需要以下特定于平台的设置。

无需其他设置。

提示

必须在 UI 线程上调用所有方法,因为 Xamarin.Essentials 会自动处理权限检查和请求。

选取单个文件

通过 FilePicker.PickAsync() 方法,用户可以从设备中选取单个文件。 调用该方法时,你可以指定各种 PickOptions,从而指定要显示的标题以及允许用户选取的文件类型。 默认情况下

async Task<FileResult> PickAndShow(PickOptions options)
{
    try
    {
        var result = await FilePicker.PickAsync(options);
        if (result != null)
        {
            Text = $"File Name: {result.FileName}";
            if (result.FileName.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) ||
                result.FileName.EndsWith("png", StringComparison.OrdinalIgnoreCase))
            {
                var stream = await result.OpenReadAsync();
                Image = ImageSource.FromStream(() => stream);
            }
        }
        
        return result;
    }
    catch (Exception ex)
    {
        // The user canceled or something went wrong
    }
    
    return null;
}

提供的默认文件类型包括 FilePickerFileType.ImagesFilePickerFileType.PngFilePickerFilerType.Videos。 可以在创建 PickOptions 时指定自定义文件类型,并且可以根据平台自定义文件类型。 下面的示例说明了如何指定特定 comic 文件类型:

var customFileType =
    new FilePickerFileType(new Dictionary<DevicePlatform, IEnumerable<string>>
    {
        { DevicePlatform.iOS, new[] { "public.my.comic.extension" } }, // or general UTType values
        { DevicePlatform.Android, new[] { "application/comics" } },
        { DevicePlatform.UWP, new[] { ".cbr", ".cbz" } },
        { DevicePlatform.Tizen, new[] { "*/*" } },
        { DevicePlatform.macOS, new[] { "cbr", "cbz" } }, // or general UTType values
    });
var options = new PickOptions
{
    PickerTitle = "Please select a comic file",
    FileTypes = customFileType,
};

选取多个文件

如果希望用户可以选择多个文件,则可以调用 FilePicker.PickMultipleAsync() 方法。 该方法也采用 PickOptions 作为参数,来指定其他信息。 结果与 PickAsync 相同,但返回的内容不是单个 FileResult,而是一个可循环访问的 IEnumerable<FileResult>

提示

FullPath 属性并不总是返回文件的物理路径。 若要获取文件,请使用 OpenReadAsync 方法。

平台差异

  • 无平台差异。

API