Xamarin Unauthorized Access Permission在下载文件时

o2g1uqev  于 2023-05-04  发布在  其他
关注(0)|答案(1)|浏览(196)

我一直在尝试创建一个功能,用户将下载一个文件(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.GrantedStorageReadStorageWrite
下面是我的代码:下载功能

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");时,没有错误显示并提示“下载成功”。但是我找不到这个地方的路径。

33qvvth1

33qvvth11#

对于有此问题的任何人,如果您想在Xamarin或MAUI android中下载文件,最好使用下载管理器,并且对于Android版本〉= 10,您可以通过在应用程序的外部文件目录中指定路径来避免System.UnauthorizedAccessException
我们是这样做的:创建下载管理器请求,

using var request = new DownloadManager.Request(global::Android.Net.Uri.Parse(downloadUrl));

使用此方法设置应用程序外部文件目录的下载路径:

request.SetDestinationInExternalFilesDir(Platform.CurrentActivity, Environment.DirectoryDownloads, fileName);

并且,您使用下载管理器示例来下载项目。

long downloadId = manager.Enqueue(request);

下载完成后,你就可以完全访问下载的文件,你可以读,写,删除文件,如你所愿。
有关使用此方法下载、监视和控制下载的更多详细信息,请访问checkout this awesome article

相关问题