我正在尝试使用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)时,文件就在这里,大小与其他文件相同...
我不知道如何每次都能使用,希望有人能帮助我:) 嗨!
答案 0 :(得分:0)
我尝试放置for(让i = 1; i <101; i ++)做RNFB 100次: 它可以工作97次/ 100/96次/ 100 然后我尝试放置一个计时器,以确保文件下载完成,它可以工作3次/ 100 ... 我删除了计时器,现在它不再工作了,或者5次/ 100 ...
我真的不明白是什么问题:(