我正面临我的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);
});
});
}