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