我一直在尝试创建一个功能,用户将下载一个文件(PDF)时,一个按钮被点击。我将文件存储在firebase存储中,可以通过url/link访问。我发现这个解决方案How to download files in Xamarin.Forms?可以帮助你从url下载。然而,我得到了一个错误,说**System.UnauthorizedAccessException:** 'Access to the path '/data/user/0/com.companyname.pawadopt_v5/files' is denied.'
,我已经确保检查并使用Xamarin.Essentials
请求权限,但我一直得到这个错误,即使使用Permission.Granted
为StorageRead
和StorageWrite
。
下面是我的代码:下载功能
public async Task<bool> DownloadFile(string fileURL)
{
var checkPermission = await PermissionServices.PermissionClientInstance.checkStorage();
if(checkPermission == true)
{
string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
try
{
var client = new HttpClient();
var downloadStream = await client.GetStreamAsync(fileURL);
var fileStream = File.Create(path);
await downloadStream.CopyToAsync(fileStream);
return true;
}
catch (Exception ex)
{
return false;
}
}
else
{
return false;
}
}
检查并请求权限
var Readpermission = await Permissions.CheckStatusAsync<Permissions.StorageRead>();
var Writepermission = await Permissions.CheckStatusAsync<Permissions.StorageWrite>();
if (Readpermission != PermissionStatus.Granted || Writepermission != PermissionStatus.Granted)
{
Readpermission = await Permissions.RequestAsync<Permissions.StorageRead>();
Writepermission = await Permissions.RequestAsync<Permissions.StorageWrite>();
}
if (Readpermission != PermissionStatus.Granted && Writepermission != PermissionStatus.Granted)
return false;
else
return true;
您对此有什么想法和解决方案?任何想法和解决方案都非常感谢
更新
当我将路径更改为string localPath = Path.Combine(FileSystem.AppDataDirectory,"File.pdf");
时,没有错误显示并提示“下载成功”。但是我找不到这个地方的路径。
1条答案
按热度按时间33qvvth11#
对于有此问题的任何人,如果您想在Xamarin或MAUI android中下载文件,最好使用下载管理器,并且对于Android版本〉= 10,您可以通过在应用程序的外部文件目录中指定路径来避免System.UnauthorizedAccessException。
我们是这样做的:创建下载管理器请求,
使用此方法设置应用程序外部文件目录的下载路径:
并且,您使用下载管理器示例来下载项目。
下载完成后,你就可以完全访问下载的文件,你可以读,写,删除文件,如你所愿。
有关使用此方法下载、监视和控制下载的更多详细信息,请访问checkout this awesome article。