Ionic React Native - 请求出错:/storage/emulated/0/Download/newPicture.png:打开失败:EACCES(权限被拒绝)

Ionic React Native - There was an error with the request: /storage/emulated/0/Download/newPicture.png: open failed: EACCES (Permission denied)

我的 Ionic React Android 应用程序遇到问题。我想将文件下载到 Android 的 Public 下载文件夹,但我总是收到此错误:

Msg: error block ...  There was an error with the request: /storage/emulated/0/Download/newPicture.png: open failed: EACCES (Permission denied)

我正在使用以下代码:

function download(name){
    AndroidPermissions.hasPermission(AndroidPermissions.PERMISSION.READ_EXTERNAL_STORAGE)
        .then(status => {
          if (status.hasPermission) {
            console.log("Has permission");
            performAndroidDownload(name);
          } 
          else {
            console.log("Request permission");
            AndroidPermissions.requestPermission(AndroidPermissions.PERMISSION.READ_EXTERNAL_STORAGE)
              .then(status => {
                if(status.hasPermission) {
                  performAndroidDownload(name);
                }
              });
          }
        });
}

    function performAndroidDownload(name:string){
        const filePath = File.externalRootDirectory +"Download/"+ name; 
        console.log(filePath);
        HTTP.downloadFile("https://url.com/uploads/"+match.params.id+"/"+name, {}, {}, filePath).then(response => {
        // prints 200
        console.log('success block...', response);
        }).catch(err => {
        // prints 403
        console.log('error block ... ', err.status);
        // prints Permission denied
        console.log('error block ... ', err.error);
        });
    }

我也将 android:requestLegacyExternalStorage="true" 添加到我的 AndroidManifest.xml,但它没有帮助。

也尝试了 WRITE_EXTERNAL_STORAGE 权限,但没有帮助。

感谢您的帮助!

我终于解决了权限问题!

像上面那样请求权限后,我需要添加以下行:

AndroidPermissions.requestPermissions([AndroidPermissions.PERMISSION.READ_EXTERNAL_STORAGE,AndroidPermissions.PERMISSION.WRITE_EXTERNAL_STORAGE])

整个解决方案是:

function download(name){
    AndroidPermissions.hasPermission(AndroidPermissions.PERMISSION.READ_EXTERNAL_STORAGE)
        .then(status => {
          if (status.hasPermission) {
            console.log("Has permission");
            performAndroidDownload(name);
          } 
          else {
            console.log("Request permission");
            AndroidPermissions.requestPermission(AndroidPermissions.PERMISSION.READ_EXTERNAL_STORAGE)
              .then(status => {
                if(status.hasPermission) {
                  performAndroidDownload(name);
                }
              });
          }
        });
}

function performAndroidDownload(name:string){
    const filePath = File.externalRootDirectory + "Download/" + name; 
    AndroidPermissions.requestPermissions([AndroidPermissions.PERMISSION.READ_EXTERNAL_STORAGE,AndroidPermissions.PERMISSION.WRITE_EXTERNAL_STORAGE]).then(e => {
      
      HTTP.downloadFile("https://url.com/uploads/"+match.params.id+"/"+name, {}, {}, filePath).then(response => {
        // prints 200
        console.log('success block...', JSON.stringify(response));
    
        }).catch(err => {
        // prints 403
        console.log('error block ... ', err.status);
        // prints Permission denied
        console.log('error block ... ', err.error);
        });
    });

  }