السلام عليكم اقوم بتصدير قاعدة البيانات من خلال مكتبة react-native-document-picker
الشكلة عند قرائة المسار اذا اختار المستخدم ملف عربى يقوم بحفظ فيه يظهر فى المسار بشكل غير مفهومم
كيف يمكننى اصلاح هذا
const uri ='content://com.android.externalstorage.documents/tree/primary%3ADocuments';
من الممكن الإعتماد على دالة decodeURIComponent في جافاسكريبت لفك تشفير المكونات المؤلفة للمسار، أي كالتالي:
const uri = 'content://com.android.externalstorage.documents/tree/primary%3ADocuments'; const decodedURI = decodeURIComponent(uri); console.log(decodedURI);
ومن الأفضل حفظ المسار بشكله المشفر، ثم تحويله متى شئت.
كيف يمكننى الحفظ فى هذا المسار استخدم مكتبة
react-native-fs
ولاكن لايممكن للمكتبة الدخول الى هذا المسار
يجب ان تضمن ان الصلاحيات كلها موجودة من أجل الحفظ في المسار المطلوب حرب ان تضيف هذه الصلاحيات في ملف AndroidManifest.xml الموجود في العادة في المسار android/app/src/main/
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.appName">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
...
android:requestLegacyExternalStorage="true"
...
>
</application>
</manifest>
و ايضا داخل ميثود اللي تسوي حفظ للملف حاول تضيف هذا الكود الذي يسمح بالتأكد اذا كان هناك صلاحيات للحفظ او لا
try {
const granted = await PermissionsAndroid.requestMultiple([
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
]);
} catch (err) {
console.warn(err);
}
const readGranted = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE);
const writeGranted = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE);
if(!readGranted || !writeGranted) {
console.log('Read and write permissions have not been granted');
return;
}
التعليقات