Я пытаюсь загрузить 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(), файл находится здесь, с тем же размером, что и другие...
Я не знаю, как заставить его работать каждый раз, надеюсь, кто-нибудь мне поможет :) Тай!