尝试将使用 [react-native-document-picker] 选择的文件上传到 fireStore 存储时出现权限拒绝错误
Permission Denial Error when trying to upload file picked with [react-native-document-picker] to fireStore storage
我正在尝试将 xlsx 上传到 firestore 存储,我正在使用 react-native-document-picker 从 ExternalStorageDirectoryPath
中选择文件,所以当我只记录文件 uri 时,我没有得到错误但是一旦尝试上传文件就会抛出错误。
相关代码:
const uploadFile=async ()=>{
try {
const res = await DocumentPicker.pick({
type: [DocumentPicker.types.allFiles],
});
const task = Storage().ref('catalogue/'+ res.name).putFile(res.uri);
task.on('state_changed',
sn =>{},
err=>console.log(err),
() => {
console.log('excel uploaded!'+res.name)
Storage()
.ref("catalogue").child(res.name).getDownloadURL()
.then(url => {
console.log('uploaded excel url', url);
}).catch(err=>console.log(err))
}
)
await task
} catch (err) {
if (DocumentPicker.isCancel(err)) {
// User cancelled the picker, exit any dialogs or menus and move on
} else {
throw err;
}
}
}
`
我已经在我的 AndroidManifest.xml
文件中包含了所需的权限并重建了项目
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
但我仍然收到此错误:
Permission Denial: reading com.android.externalStorageProvider uri content://com... requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()
我在最后一个 android SDK 版本的 Qt 框架中遇到了类似的问题,我通过在清单(pat 应用程序)中添加 requestLegacyExternalStorage 解决了这个问题:
<application android:requestLegacyExternalStorage="true" android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" //...
这与最近权限系统的变化有关:
https://developer.android.com/about/versions/11/privacy/storage
我正在尝试将 xlsx 上传到 firestore 存储,我正在使用 react-native-document-picker 从 ExternalStorageDirectoryPath
中选择文件,所以当我只记录文件 uri 时,我没有得到错误但是一旦尝试上传文件就会抛出错误。
相关代码:
const uploadFile=async ()=>{
try {
const res = await DocumentPicker.pick({
type: [DocumentPicker.types.allFiles],
});
const task = Storage().ref('catalogue/'+ res.name).putFile(res.uri);
task.on('state_changed',
sn =>{},
err=>console.log(err),
() => {
console.log('excel uploaded!'+res.name)
Storage()
.ref("catalogue").child(res.name).getDownloadURL()
.then(url => {
console.log('uploaded excel url', url);
}).catch(err=>console.log(err))
}
)
await task
} catch (err) {
if (DocumentPicker.isCancel(err)) {
// User cancelled the picker, exit any dialogs or menus and move on
} else {
throw err;
}
}
}
`
我已经在我的 AndroidManifest.xml
文件中包含了所需的权限并重建了项目
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
但我仍然收到此错误:
Permission Denial: reading com.android.externalStorageProvider uri content://com... requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()
我在最后一个 android SDK 版本的 Qt 框架中遇到了类似的问题,我通过在清单(pat 应用程序)中添加 requestLegacyExternalStorage 解决了这个问题:
<application android:requestLegacyExternalStorage="true" android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" //...
这与最近权限系统的变化有关: https://developer.android.com/about/versions/11/privacy/storage