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.Images
、FilePickerFileType.Png
和 FilePickerFilerType.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
方法。