我的 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);
});
}
我还在 AndroidManifest.xml 中添加了 android:requestLegacyExternalStorage="true"
,但没有帮助。
也尝试了 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);
});
});
}