Как извлечь содержимое файлов .zip (распаковать) в Electron Framework

Прежде чем вы сможете начать использовать содержимое (файлы) в zip-файле, вы должны распаковать его. В этой статье вы узнаете, как распаковать файлы .zip с помощью Electron Framework и decompress-zip модуль.

Требования

Для распаковки файлов в Electron вам понадобится модуль deppress-zip, который позволяет извлекать файлы из ZIP-архива с помощью пары строк кода. Чтобы установить файл распаковки в вашем проекте, выполните следующую команду в командной строке:

npm install decompress-zip

После установки вы сможете запросить модуль в своем коде, используя require('decompress-zip'), Посетите хранилище модуля в Github для получения дополнительной информации..

Реализация

С decompress-zip Вы сможете выполнить 2 задачи: распаковывать ZIP-файл и перечислить содержание ZIP-файла

Распаковать (распаковать .zip файл)

Чтобы распаковать файл .zip, мы будем использовать метод unzipper.extract. Этот метод извлекает содержимое файла архива ZIP и возвращает EventEmitter с двумя возможными событиями: error срабатывает в случае ошибки, и extract когда извлечение завершено.

Значение, передаваемое в событие extract, представляет собой базовый журнал каждого файла и его сжатие. Чтобы распаковать файл, вам нужно указать только текущий путь к файлу zip и каталог назначения:

var ZIP_FILE_PATH = "C:/path/to/file/myzipfile.zip";
var DESTINATION_PATH = "C:/desktop/examplefolder";
var unzipper = new DecompressZip(ZIP_FILE_PATH);
// Add the error event listener
unzipper.on('error', function (err) {
console.log('Caught an error', err);
});
// Notify when everything is extracted
unzipper.on('extract', function (log) {
console.log('Finished extracting', log);
});
// Notify "progress" of the decompressed files
unzipper.on('progress', function (fileIndex, fileCount) {
console.log('Extracted file ' + (fileIndex + 1) + ' of ' + fileCount);
});
// Start extraction of the content
unzipper.extract({
path: DESTINATION_PATH
// You can filter the files that you want to unpack using the filter option
//filter: function (file) {
//console.log(file);
//return file.type !== "SymbolicLink";
//}
});

Если вы хотите фильтровать файлы во время распаковки, как показано выше, вы можете положиться на filter недвижимость в unzipper.extract метод (если возвращаемое значение true, то файл будет распакован). Файловый объект (в обратном вызове фильтра) содержит все следующие свойства:

{
"_offset":40,
"_maxSize":34348,
"parent":".",
"filename":"image4.png",
"path":"image4.png",
"type":"File",
"mode":438,
"compressionMethod":8,
"modified":"2016-10-18T14:25:12.000Z",
"crc32":1376504589,
"compressedSize":34348,
"uncompressedSize":34381,
"comment":"",
"flags":{
"encrypted":false,
"compressionFlag1":false,
"compressionFlag2":false,
"useDataDescriptor":false,
"enhancedDeflating":false,
"compressedPatched":false,
"strongEncryption":false,
"utf8":false,
"encryptedCD":false
}
}

В следующем примере показана базовая реализация decompress-zip с использованием родные диалоги электрон.


Electron Zip Uncompress Files
var DecompressZip = require('decompress-zip');
var app = require('electron').remote;
var dialog = app.dialog;
(function () {
function uncompress(ZIP_FILE_PATH, DESTINATION_PATH){
var unzipper = new DecompressZip(ZIP_FILE_PATH);
// Add the error event listener
unzipper.on('error', function (err) {
console.log('Caught an error', err);
});
// Notify when everything is extracted
unzipper.on('extract', function (log) {
console.log('Finished extracting', log);
});
// Notify "progress" of the decompressed files
unzipper.on('progress', function (fileIndex, fileCount) {
console.log('Extracted file ' + (fileIndex + 1) + ' of ' + fileCount);
});
// Unzip !
unzipper.extract({
path: DESTINATION_PATH
});
}
document.getElementById("select-file").addEventListener("click", () => {
// Select the .zip file
dialog.showOpenDialog({
title:"Select the .zip file to decompress"
},function (fileNames) {
// fileNames is an array that contains the selected file
if(fileNames === undefined){
console.log("No file selected");
return;
}else{
// Select destination folder
dialog.showOpenDialog({
title:"Select destination folder where the content should be decompressed",
properties: ["openDirectory"]
},function (folderPaths) {
// folderPaths is an array that contains all the selected paths
if(fileNames === undefined){
console.log("No destination folder selected");
return;
}else{
// Proceed to decompress
uncompress(fileNames[0], folderPaths[0]);
}
});
}
});
}, false);
})();

Предыдущий код создаст простое приложение с кнопкой, которая позволит вам выбрать .застежка-молния распаковываемый файл:

Выберите .zip файловый браузер

Вы можете (если хотите) фильтровать только .zip файлы в обозревателе файлов, добавив свойство filters при инициализации обозревателя файлов:

dialog.showOpenDialog({
title:"Select the .zip file to decompress",
filters: [
{name: '.ZIP Files', extensions: ['zip']},
{name: 'All Files', extensions: ['*']}
]
}, (fileNames) => {
// The rest of the code here
});

Выберите только .zip файловый браузер

Затем он сохранит путь к файлу в переменной и снова запустит диалоговое окно, в котором вы сможете выбрать папку, в которую следует распаковать содержимое zip-файла:

Выберите браузер для распаковки .zip файла

Согласно предыдущим действиям, Downloads.zip файл будет распакован в Desktop/example папка. Как только вы выберете папку, распаковка начнет показывать прогресс в консоли и сохранять файлы в папке назначения:

Распакованный .zip файл с электроном

Список содержимого файла .zip

Вы можете перечислить содержимое файла, не распаковывая его напрямую, используя unzipper.list метод. Метод list очень похож на извлечение, за исключением того, что событие успеха перечисляет данные для события. Кроме того, извлеченный массив предоставляет пути к файлам, что означает, что файлы фактически не извлекаются. Метод list не ожидает аргументов.

Следующий фрагмент должен

var ZIP_FILEPATH = "C:/path/to/file/myzipfile.zip";
// Require DecompressZip module
var DecompressZip = require('decompress-zip');
// Declare the unzipper class
var unzipper = new DecompressZip(ZIP_FILEPATH);
// Add the error event listener
unzipper.on('error', (err)  => {
console.log('Caught an error', err);
});
// Add the list event listener that will be triggered when the unzipper can list the content
unzipper.on('list', (files) => {
// Show the array of items in the console
console.log(files);
});
// Trigger to list the content of the zip file
unzipper.list();

В следующем HTML-документе в электронном виде показано, как составить список содержимого файла .zip (перетащите файл .zip для отображения содержимого в консоли).


Electron Zip List Files
#drag-file {
background-color: blue;
color:white;
text-align: center;
width:300px;
height:300px;
}

Drag your zip files here to list content on the console

var DecompressZip = require('decompress-zip'); (function () { var holder = document.getElementById('drag-zip'); holder.ondragover = holder.ondragleave = holder.ondragend = () => { return false; }; holder.ondrop = (e) => { e.preventDefault(); var firstFile = e.dataTransfer.files[0]; if(!firstFile){ console.log("No file given"); return; } var unzipper = new DecompressZip(firstFile.path); unzipper.on('error', (err) => { console.log('Caught an error', err); }); unzipper.on('list', (files) => { console.log('The zip file contains:'); console.log(files); }); unzipper.list(); return false; }; })();

Реализация предыдущего примера в Electron должна дать в результате:

Электронный список .zip файл

Как видите, извлечь файл .zip довольно просто с помощью этого модуля, созданного Bower. Повеселись !

Ссылка на основную публикацию
Adblock
detector