React native: не удается распаковать файл, полученный с помощью rn-fetch-blob - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь скачать 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);
    });
}

Другие данные:

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

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

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

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

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

1 Ответ

0 голосов
/ 09 октября 2019

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

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

...