Ionic React Native -请求:/storage/ emululated /0/Download/newP



我正面临我的Ionic React Android应用程序的问题。我想下载一个文件到Android的公共下载文件夹,但我总是得到这个错误:

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);
});
});
}

最新更新