Как создать файл и сохранить его в папке загрузки Android?

Я использую rn-fetch-blobhttps://github.com/joltup/rn-fetch-blob. Я создаю новый файл и сохраняю его в папке загрузок. Примечание. Я использую эмулятор. Теперь, когда я пытаюсь создать новый файл и использую каталог загрузки, см. это -> https://github.com/joltup/rn-fetch-blob/wiki/File-System-Access-API#dirs, но я получаю сообщение об ошибке, говорящее, что в разрешении отказано, почему так? Как я могу включить разрешение, чтобы файл сохранялся в папке загрузки в собственном приложении Android?

Код:

saveFile = () => {
        const fs = RNFetchBlob.fs;

        const dirs = RNFetchBlob.fs.dirs;
        console.info("directory path: ",dirs.DownloadDir );

        const NEW_FILE_PATH = dirs.DownloadDir + '/demo.txt';

        console.info("file path: ", NEW_FILE_PATH);

        fs.createFile(NEW_FILE_PATH, 'foo', 'utf8');

    }

AndroidManifest.xml:

    <uses-permission android:name = "android.permission.INTERNET" />
    <uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name = "android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission tools:node = "remove" android:name = "android.permission.READ_PHONE_STATE" />
    <uses-permission tools:node = "remove" android:name = "android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission tools:node = "remove" android:name = "android.permission.READ_EXTERNAL_STORAGE" />

Снимок экрана:

Как создать файл и сохранить его в папке загрузки Android?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
6 045
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вам нужен <uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" />

Если вы используете версию Android 6 или выше, вам необходимо запросить разрешение во время выполнения.

Я использую Android 9 API 28

fun joker 01.02.2019 08:10

Я добавил эти 2 строки в файл androidManifest.xml, но все еще получаю ту же проблему, почему так?

fun joker 01.02.2019 08:11

хорошо, просто зайдите в настройки приложения, затем разрешение, дайте разрешение на хранение и попробуйте

Krutika Chotara 01.02.2019 08:18

@kritika Ок, исправил проблему. Для реагирования на собственный Android вам не нужно добавлять использование-разрешение android:name = "android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" /> эти строки. Смотрите мой измененный ответ.

fun joker 01.02.2019 08:20
Ответ принят как подходящий

Чтобы разрешить доступ к другим каталогам в rn-fetch-blob, если версия Android выше 6, вам нужно запросить разрешение во время выполнения. Ссылка: https://facebook.github.io/react-native/docs/permissionandroid

Модифицированный код:

import {PermissionsAndroid} from 'react-native';

    saveFile = async () => {

            try {
                const granted = await PermissionsAndroid.request(
                    PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE
                );
                if (granted === PermissionsAndroid.RESULTS.GRANTED) {
                    console.info("Permission granted");

                    const fs = RNFetchBlob.fs;
                    // const base64 = RNFetchBlob.base64;

                    const dirs = RNFetchBlob.fs.dirs;
                    console.info(dirs.DownloadDir);

                    const NEW_FILE_PATH = dirs.DownloadDir + '/test.txt';
                    fs.createFile(NEW_FILE_PATH, 'foo', 'utf8');

                } else {
                    console.info('Permission denied');
                }
                } catch (err) {
                    console.warn(err);
                }

        }

Дополнительные ссылки для rn-fetch-blob:

1) https://github.com/joltup/rn-fetch-blob/wiki/File-System-Access-API#dirs

2) https://github.com/joltup/rn-fetch-blob

Привет, я получаю отказ от необработанного обещания с этим кодом.? Пожалуйста помоги. Я пытаюсь записать файл в папку «Загрузки».

alex 19.06.2020 02:44

Другие вопросы по теме