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