Как скачивать и сохранять файлы в Expo?

Ссылка скопирована
1 ответ

Как в Expo просто скачивать и сохранять файлы в памяти мобильного устройства? Что бы я ни находил, не помогает, на каком-либо из этапов ошибка. Вот пример одной из функция для загрузки, которую я пытаюсь использовать:

export const testDownload = async (fileId: string) => {   try {     const fileUri = `${FileSystem.documentDirectory}${fileId}`;     const downloadResult = await FileSystem.downloadAsync(         `${basicUrl}/files/${fileId}`,         fileUri,     );      console.log("result", downloadResult)     if (downloadResult.status === 200) {       console.log('Файл успешно сохранен:', downloadResult.uri);       // Файл успешно скачан и сохранен     } else {       console.error('Ошибка при скачивании файла:', downloadResult.status);     }   }   catch (error) {     console.error('Произошла ошибка при попытке скачать файл:', error);   } };

export const testDownload = async (fileId: string) => { try { const fileUri = `${FileSystem.documentDirectory}${fileId}`; const downloadResult = await FileSystem.downloadAsync( `${basicUrl}/files/${fileId}`, fileUri, ); console.log("result", downloadResult) if (downloadResult.status === 200) { console.log('Файл успешно сохранен:', downloadResult.uri); // Файл успешно скачан и сохранен } else { console.error('Ошибка при скачивании файла:', downloadResult.status); } } catch (error) { console.error('Произошла ошибка при попытке скачать файл:', error); } };

Может, у кого-то есть какой-то туториал или можете вкратце объяснить как корректно реализовать? Мне нужна просто универсальная функция, которая будет просто сохранять файл, который приходит по запросу.

Дополнительно:

https://docs.expo.dev/versions/latest/sdk/filesyst...

обратите внимание. Внутренняя файловая система !!!
На андроиде она эмулируется по своему, на десктопах по своему.

То есть вы можете скачать файл и обращаться к нему из кода своего приложения.
А вот чтобы файл стал доступен и другим приложениям на телефоне - это уже другая задача.

  • Олег, извиняюсь, слегка не понял вас возможно. Посмотрел ещё раз эту документацию и возник вопрос - правильно я понял что Expo толком не предоставляет возможность файл сохранить и сделать его доступным для других приложений и хранить в файловой системе? Если так, то это даже удивительно как-то.
  • Олег, все, понял что вы имели ввиду. Тогда будут у меня файлы только для просмотра. Еще раз спасибо за помощь! Вы бы могли просто свой комментарий вынести в ответы и я пометил бы что это решение.
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Артём Dev Ответ

    Для скачивания и сохранения файлов в Expo, вы можете использовать библиотеку Expo FileSystem. Эта библиотека позволяет взаимодействовать с файловой системой устройства, что позволяет загружать, сохранять и управлять файлами.

    Прежде всего, вам необходимо установить Expo FileSystem. Для этого выполните следующую команду:

    expo install expo-file-system

    expo install expo-file-system

    После установки вы можете начать использовать Expo FileSystem для загрузки и сохранения файлов. Вот пример кода на JavaScript, демонстрирующий этот процесс:

    import * as FileSystem from 'expo-file-system';
     
    const downloadFile = async () => {
      const fileUri = FileSystem.cacheDirectory + 'example.txt';
      const url = 'https://example.com/example.txt';
     
      try {
        const { uri } = await FileSystem.downloadAsync(url, fileUri);
        console.log('Файл загружен по адресу:', uri);
      } catch (error) {
        console.error('Ошибка загрузки файла:', error);
      }
    };
     
    const saveFile = async () => {
      const fileUri = FileSystem.cacheDirectory + 'example.txt';
      const newLocation = FileSystem.documentDirectory + 'example.txt';
     
      try {
        await FileSystem.moveAsync({ from: fileUri, to: newLocation });
        console.log('Файл сохранен по адресу:', newLocation);
      } catch (error) {
        console.error('Ошибка сохранения файла:', error);
      }
    };
     
    // Вызов функций для загрузки и сохранения файла
    downloadFile();
    saveFile();

    import * as FileSystem from 'expo-file-system'; const downloadFile = async () => { const fileUri = FileSystem.cacheDirectory + 'example.txt'; const url = 'https://example.com/example.txt'; try { const { uri } = await FileSystem.downloadAsync(url, fileUri); console.log('Файл загружен по адресу:', uri); } catch (error) { console.error('Ошибка загрузки файла:', error); } }; const saveFile = async () => { const fileUri = FileSystem.cacheDirectory + 'example.txt'; const newLocation = FileSystem.documentDirectory + 'example.txt'; try { await FileSystem.moveAsync({ from: fileUri, to: newLocation }); console.log('Файл сохранен по адресу:', newLocation); } catch (error) { console.error('Ошибка сохранения файла:', error); } }; // Вызов функций для загрузки и сохранения файла downloadFile(); saveFile();

    В приведенном выше примере функция downloadFile сначала загружает файл по указанному URL и сохраняет его в кэше устройства. Функция saveFile затем перемещает файл из кэша в директорию документов устройства.

    Не забудьте, что для использования Expo FileSystem вам также может потребоваться установить дополнительные разрешения в файле app.json вашего проекта.

    Это основной способ скачивания и сохранения файлов в Expo с использованием Expo FileSystem. Надеюсь, это поможет вам решить вашу проблему!

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно