当尝试拿起文件时,所有文件都显示为禁用。我无法选择文件。我使用下面的代码。
var options = new PickOptions
{
PickerTitle = "Please select a pdf file",
FileTypes = FilePickerFileType.Pdf
};
var fileResult = await FilePicker.PickAsync(options);
var file = await Constants.ValidateFileNew(fileResult);
if (file.IsValid )
{
var fileName = file.FileName;
var data = file.fileData;
Stream stream = new MemoryStream(data);
fileID += 1;
ListNursingAssessmentFileNames.Add(new FileEntity { FileName = fileName, FileID = fileID, File = data });
DependencyService.Get<IJsonFileService>().SaveToLibrary<ObservableCollection<FileEntity>>(ListNursingAssessmentFileNames, "NursingInitialAssessmentFiles.json");
stackDigitalForm.IsVisible = false;
}
我有提供外部存储权限。存储权限SS
您需要在创建PickOptions时指定自定义文件类型,并且它们可以根据平台进行自定义。
每个文档中,PickOptions.FileTypes
在每个平台中都有许多类型,
在Android和iOS上,不匹配此列表的文件只显示为灰色。当数组为null或空时,选择时可以选择所有文件类型。这个数组的内容是平台特定的;每个平台都有自己的方式来指定文件类型。在Android上,你可以指定一个或多个MIME类型,例如:"image/png";也可以使用通配符,例如"image/*"。在iOS上,你可以指定UTType常量,例如UTType. image。在UWP上,指定一个扩展名列表,像这样:".jpg", ".png"
您可以参考以下示例代码:
我添加一个按钮来触发选择事件,
private void PickFileButton_Clicked(object sender, EventArgs e)
{
Task<FileResult> results = PickAndShow();
}
//for custom types
async Task<FileResult> PickAndShow()
{
var customFileType = new FilePickerFileType(new Dictionary<DevicePlatform, IEnumerable<string>>
{
{ DevicePlatform.iOS, new[] { "com.adobe.pdf", "UTType.Image" } }, // or general UTType values
{ DevicePlatform.Android, new[] { "application/pdf", "image/*" } },
{ DevicePlatform.UWP, new[] { ".pdf", ".jpg", ".png" } },
{ DevicePlatform.Tizen, new[] { "*/*" , ".png" } },
{ DevicePlatform.macOS, new[] { "pdf" , "public.image" } },
});
try
{
var result = await FilePicker.PickAsync(new PickOptions
{
PickerTitle = "Please select files",
FileTypes = customFileType,
});
if (result != null)
{
FileName.Text = $"File Name: {result.FileName}";
if (result.FileName.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) ||
result.FileName.EndsWith("png", StringComparison.OrdinalIgnoreCase))
{
var stream = await result.OpenReadAsync();
FileImage.Source = ImageSource.FromStream(() => stream);
}
}
return result;
}
catch (Exception ex)
{
// The user canceled or something went wrong
}
return null;
}
注意:不要忘记在manifest文件中添加WRITE_EXTERNAL_STORAGE
和RAED_EXTERNAL_STORAGE
。
官方参考文档android https://learn.microsoft.com/en-us/xamarin/essentials/file-picker?context=xamarin%2Fxamarin-forms&标签=