當嘗試獲取檔案時,所有檔案都顯示為禁用。我無法選擇檔案。我正在使用下面的代碼。
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
uj5u.com熱心網友回復:
您需要在創建 PickOptions 時指定自定義檔案型別,并且可以根據平臺對其進行自定義。
每個檔案,PickOptions.FileTypes每個平臺都有很多型別,
在 Android 和 iOS 上,與此串列不匹配的檔案僅顯示為灰色。當陣列為空或為空時,可以在拾取時選擇所有檔案型別。這個陣列的內容是平臺特定的;每個平臺都有自己的方式來指定檔案型別。在 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;
}
}
注意:不要忘記在清單檔案中添加WRITE_EXTERNAL_STORAGE和。RAED_EXTERNAL_STORAGE
官方參考檔案: https ://docs.microsoft.com/en-us/xamarin/essentials/file-picker?context=xamarin/xamarin-forms&tabs=android
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/483667.html
