React native:无法解压缩使用rn-fetch-blob

时间:2019-10-08 10:08:00

标签: react-native fetch unzip react-native-fetch-blob

我正在尝试使用rn-fetch-blob下载一个zip文件,然后当我得到此文件时,使用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);
    });
}

其他信息:

  • 该文件是一个数据库,我必须将其放入“数据库”文件夹的应用程序中。我尝试将console.log(path)放在“ unzipFile()”函数中的所有位置,以查看当我尝试解压缩文件时是否确实创建了该文件,并且看来他在这里……而当文件无法解压缩时,它的大小与其他可用的大小相同。

  • rn-fetch-blob调用一个api,该api复制一个现有的远程数据库并将其压缩为axd文件。这种格式有什么问题吗? api可能是问题吗?

  • 由api创建的axd文件由现有应用程序使用,并且似乎对于现有应用程序正常工作。此外,当我们下载不带rn-fetch-blob的文件时(通过在导航器中复制链接),每次尝试都可以正常工作。

  • 我尝试直接下载文件,api总是向我发送相同的文件(zip文件或axd文件),并且可以正常工作(尝试20次)。问题可能出在文件下载延迟上吗?使用api,需要5或6秒钟,而无需2秒钟。但是我认为我的unzipFile()函数仅在下载文件时启动,不是吗?就像我说的,当我在unzipFile()函数中放置console.log(path)时,文件就在这里,大小与其他文件相同...

我不知道如何每次都能使用,希望有人能帮助我:) 嗨!

1 个答案:

答案 0 :(得分:0)

我尝试放置for(让i = 1; i <101; i ++)做RNFB 100次: 它可以工作97次/ 100/96次/ 100 然后我尝试放置一个计时器,以确保文件下载完成,它可以工作3次/ 100 ... 我删除了计时器,现在它不再工作了,或者5次/ 100 ...

我真的不明白是什么问题:(