Nano Hash - криптовалюты, майнинг, программирование

React native: не могу разархивировать файл, который я получаю с помощью rn-fetch-blob

Я пытаюсь загрузить zip-файл с помощью rn-fetch-blob, затем, когда я получил этот файл, я распаковал его с помощью React-native-zip-archive.

Часто это работает хорошо, но иногда созданная мной функция «unzipFile()» не может распаковать файл, например, если он поврежден. Кто-то уже столкнулся с этой проблемой?

Вот мой код:

downloadZipFile(res => {
        unzipFile(res.path(), (boolean, path) => {
          if (boolean !== false) {
            db = SQLite.openDatabase({
              name: "addb.sqlite",
              location: "default",
              createFromLocation: path
            }).then(DB => {
              db = DB;
              db.transaction(tx => {
                tx.executeSql(
                  "SELECT * FROM sqlite_master",
                  [],
                  (tx, results) => {
                    console.log("Logs sqlite_master");

                    const rows = results.rows;

                    for (let i = 0; i < rows.length; i++) {
                      console.log(_getCurrentDate());
                      datas.push({
                        ...rows.item(i)
                      });
                    }
                    console.log(datas);

                    callback(true);
                  },
                  (tx, err) => {
                    console.log(err)
                  }
                );
              });
            });
          } else {
            console.log("Can't create database");
            callback(false);
          }
        });
      });

И функции, которые я использовал:

export function downloadZipFile(callback) {
  RNFetchBlob.config({
    fileCache: true
  })
    .fetch(
      "GET",
      "MY LINK"
    )
    .then(res => {
      console.log("The file saved to ", res.path());
      callback(res);
    })
    .catch((errorMessage, statusCode) => {
      // error handling
      console.log(
        "erreur : " + errorMessage + " and statuscode : " + statusCode
      );
    });
}

export function unzipFile(sourcePath, callback) {
  const charset = "UTF-8";
  const targetPath = "/data/user/0/com.myapp/databases/";

  unzip(sourcePath, targetPath, charset)
    .then(path => {
      console.log(`unzip completed at ${path}`);

      callback(true, path);
    })
    .catch(error => {
      console.log("there is an error" + error);
      callback(false, null);
    });
}

Другая информация:

  • Файл представляет собой базу данных, которую я должен поместить в приложение папки «базы данных». Пробовал везде в функцию "unzipFile()" вставлять console.log(path), чтобы посмотреть, действительно ли файл создается при попытке его разархивировать, и вроде он здесь... И когда файл невозможно разархивировать , он имеет тот же размер, что и другие, которые работают.

  • rn-fetch-blob вызывает API, который копирует существующую удаленную базу данных и заархивирует ее как файл axd. Есть ли проблемы с этим форматом? Может быть проблема в API?

  • Файл axd, созданный API, используется существующим приложением и, кажется, работает правильно для существующего приложения. Более того, когда мы качаем файл без rn-fetch-blob (копируя ссылку в моем навигаторе), он работает корректно каждый раз, когда я пробовал.

  • Я пытался загрузить файл напрямую, API всегда отправлял мне один и тот же файл (zip-файл или файл axd), и он работал без проблем (20 попыток). Может проблема в задержке скачивания файла? С апи это занимает 5-6 секунд, без него 2 секунды. Но я думаю, что моя функция unzipFile() запускается только при загрузке файла, не так ли? И, как я уже сказал, когда я помещаю console.log(path) в функцию unzipFile(), файл находится здесь, с тем же размером, что и другие...

Я не знаю, как заставить его работать каждый раз, надеюсь, кто-нибудь мне поможет :) Тай!


Ответы:


1

Я попытался поставить for(let i = 1; i ‹ 101; i++) для выполнения RNFB 100 раз: он работает 97 раз / 100 и 96 раз / 100... Затем я попытался поставить таймер, чтобы быть уверенным файл закончил скачиваться, работает 3 раза/100... А я удалил таймер, и теперь он больше не работает, или 5 раз/100...

Я действительно не понимаю, в чем проблема :(

09.10.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..