如何在Cordova中解压缩(zip)压缩文件

本文概述

  • 1.安装cordova-plugin-zip
  • 2.使用插件
  • 例子
如今, 移动设备几乎可以执行所有操作。压缩文件允许用户操纵很多文件, 而他只能操纵一个文件。从源代码下载文件后, 也可以在Cordova中解压缩文件。本文的方法不会使用JavaScript解压缩文件, 因为通过使用客户端语言来完成任务可能会变得很乏味, 因此我们建议你使用本机代码。但请放心, 由于有一个可为你处理本机代码的插件, 你仍可以使用JavaScript进行编程!
1.安装cordova-plugin-zip为了将内容从zip文件提取到设备的某个目录中, 我们建议你使用cordova-plugin-zip插件。该插件在Android中使用java.util.zip和iOS中的SSZipArchive。
安装执行以下cordova命令的插件:
cordova plugin add cordova-plugin-zip

该插件适用于Android和iOS。如果你需要有关此插件的更多信息, 请访问Github上的官方存储库。
2.使用插件该插件在其全局变量zip.unzip中公开一个方法。此方法按以下顺序期望最多4个参数:
  • ZipPath:要解压缩的zip文件的绝对路径。
  • ZipExtractDirectory:应将文件提取到的文件夹的绝对路径。
  • StatusCallback:该函数接收作为唯一参数的数字, 该数字通知文件是否成功解压缩(成功则为0, 失败则为-1)。
  • ProgressCallback:每当减压进度更改时执行的函数。接收带有进度信息的对象作为第一个参数。
请记住, 在窗口的deviceready事件之后包装所有代码, 否则插件将无法工作:
document.addEventListener('deviceready', function(){// All your code here ...}, false);

一旦确定将执行代码, 就可以继续为库的unzip函数提供参数:
// Path to the filevar ZipPath = "file:///storage/emulated/0/some-zipfile.zip"; // Path of the destination foldervar ZipExtractDirectory = "/storage/emulated/0/"; // Handle the result of the processvar StatusCallback = function(status){if(status == 0){// Everything OK}else if(status == -1){// Everything is wrong ...}}; // Handle the progress of the decompressionvar 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);

请注意, 源参数和目标参数都可以是从HTML File接口获得的URL, 也可以是设备上文件的绝对路径, 这意味着它们可以包含file://或不包含file://。
例子使用Android Cordova的FileBrowser插件, 我们将选择一个zip文件, 并将其内容提取到Android存储设备的根文件夹中:
document.addEventListener('deviceready', onDeviceReady, false); function onDeviceReady(){// When the user clicks some button to select the filedocument.getElementById("btn").addEventListener("click", () => {// Open the single file selectorwindow.OurCodeWorld.Filebrowser.filePicker.single({success: function(data){if(!data.length){// No file selectedreturn; }// data = http://www.srcmini.com/Array with filepath// ["file:///storage/emulated/0/file.zip"]// Extract in the root folder of the storageprocessZip(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 eventvar 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 filewindow.zip.unzip(zipSource, destination, (status) => {if(status == 0){console.log("Files succesfully decompressed"); }if(status == -1){console.error("Oops, cannot decompress files"); }}, progressHandler); }

【如何在Cordova中解压缩(zip)压缩文件】编码愉快!

    推荐阅读