Как распаковать (распаковать) zip-файлы в Cordova

В наши дни мобильные устройства способны практически на все. Zip-файлы позволяют пользователю манипулировать множеством файлов, в то время как он манипулирует только одним. Возможность распаковывать файлы после их загрузки из исходного кода также может быть достигнута в Cordova. Подход этой статьи не будет использовать JavaScript для распаковки файлов, поскольку выполнение этой задачи на клиентском языке может быть утомительным, поэтому мы рекомендуем использовать для него нативный код. Но не волнуйтесь, вы все равно будете программировать на JavaScript благодаря плагину, который обрабатывает нативный код для вас!

1. Установите Cordova-плагин-Zip

Чтобы извлечь содержимое из zip-файла в какой-либо каталог вашего устройства, мы рекомендуем вам использовать плагин cordova-plugin-zip. Этот плагин использует в Android java.util.zip а также SSZipArchive в iOS

Установите плагин, выполнив следующую команду cordova:

cordova plugin add cordova-plugin-zip

Этот плагин работает для Android и iOS. Если вы хотите больше информации об этом плагине, пожалуйста, посетите официальный репозиторий на Github здесь.

2. Использование плагина

Плагин предоставляет единственный метод для его глобальной переменной, а именно zip.unzip, Этот метод ожидает до 4 аргументов в следующем порядке:

  • ZipPath: абсолютный путь к zip-файлу, который будет распакован.
  • ZipExtractDirectory: абсолютный путь к папке, в которую следует извлечь файлы.
  • StatusCallback: функция, которая получает в качестве уникального аргумента число, которое замечает, был ли файл успешно распакован или нет ( если успех и -1 если не удалось).
  • ProgressCallback: функция выполняется каждый раз, когда изменяется ход декомпрессии. В качестве первого аргумента получает объект с информацией о прогрессе.

Не забудьте обернуть перед кодом весь код после события deviceready окна, иначе плагин не будет работать:

document.addEventListener('deviceready', function(){
// All your code here ...
}, false);

Как только вы убедитесь, что код будет выполнен, вы можете перейти к аргументам функции unzip библиотеки:

// Path to the file
var ZipPath = "file:///storage/emulated/0/some-zipfile.zip";
// Path of the destination folder
var ZipExtractDirectory = "/storage/emulated/0/";
// Handle the result of the process
var StatusCallback = function(status){
if(status == 0){
// Everything OK
}else if(status == -1){
// Everything is wrong ...
}
};
// Handle the progress of the decompression
var ProgressCallback = function(progressEvent){
var percent =  Math.round((progressEvent.loaded / progressEvent.total) * 100);
// Display progress in the console : 8% ...
console.log(percent + "%");
};
// Unzip it !
window.zip.unzip(ZipPath, ZipExtractDirectory, StatusCallback, ProgressCallback);

Обратите внимание, что как исходный, так и целевой аргументы могут быть URL-адресами, полученными из интерфейса HTML-файла, или абсолютными путями к файлам на устройстве, это означает, что они могут содержать file:// или без него.

пример

С помощью плагин FileBrowser для Android Cordova, мы выберем zip-файл и извлечем его содержимое в корневую папку хранилища Android:

document.addEventListener('deviceready', onDeviceReady, false);
function onDeviceReady(){
// When the user clicks some button to select the file
document.getElementById("btn").addEventListener("click", () => {
// Open the single file selector
window.OurCodeWorld.Filebrowser.filePicker.single({
success: function(data){
if(!data.length){
// No file selected
return;
}
// data = Array with filepath
// ["file:///storage/emulated/0/file.zip"]
// Extract in the root folder of the storage
processZip(data[0], "/storage/emulated/0");
},
error: function(err){
console.log(err);
}
});
}, false);
}
/**
*
* @param zipSource Path to the zip file
* @param destination Path where the content should be placed
*/
function processZip(zipSource, destination){
// Handle the progress event
var progressHandler = function(progressEvent){
var percent =  Math.round((progressEvent.loaded / progressEvent.total) * 100);
// Display progress in the console : 8% ...
console.log(percent + "%");
};
// Proceed to unzip the file
window.zip.unzip(zipSource, destination, (status) => {
if(status == 0){
console.log("Files succesfully decompressed");
}
if(status == -1){
console.error("Oops, cannot decompress files");
}
}, progressHandler);
}
Ссылка на основную публикацию
Adblock
detector