Maison  >  Article  >  interface Web  >  Une brève analyse de la compression zip et de la décompression zip dans Node (avec code)

Une brève analyse de la compression zip et de la décompression zip dans Node (avec code)

奋力向前
奋力向前avant
2021-09-03 11:14:334497parcourir

Dans l'article précédent "Ce que vous devez savoir sur certbot pour activer l'hôte Amazon EC2 https (partage de code) ", nous avons découvert certbot pour activer l'hôte Amazon EC2 https. L'article suivant vous présentera la compression zip et la décompression zip dans Node. Voyons comment procéder.

Une brève analyse de la compression zip et de la décompression zip dans Node (avec code)

NodeJSSchéma de compression/décompression de fichier (dossier)(zip/unzip)-<code>zip commandes liées sous LinuxNodeJS文件(夹)压缩/解压方案(zip/unzip)-Linuxzip相关命令

Use adm-zip

adm-zip支持archiveunarchive一个或多个文件或者整个文件夹的功能,使用非常的简单方便。

var adm_zip = require("adm-zip");

//creating archives
var zip = new adm_zip();
zip.addLocalFolder("./dist");
zip.writeZip("./dist.zip");

//extracting archives
var unzip = new adm_zip("dist.zip");
unzip.extractAllTo("./dist", /*overwrite*/ true);

更多 apihttps://github.com/cthackers/adm-zip

Use JSZip

这个库在使用的时候需要把文件一个个增加到zip对象中,而且需要把内容也手动添加,再使用写文件操作把内存中的zip对象转成物理存储。所以如果是对于一整个文件夹来说,就很麻烦,需要遍历文件夹

var JSZip = require("jszip");
var fs = require("fs");

var zip = new JSZip();

var file_content = fs.readFileSync("archive/a.txt");

zip.file("a.txt", file_content);

var data = fs.readFileSync("archive/img/pic.jpeg");
zip.file("img/pic.jpeg", data, { base64: true });

var zipfolder = zip.generate({ type: "nodebuffer" });

fs.writeFile("jszip.zip", zipfolder, function (err) {
  if (err) throw err;
});

JSZip里面也有个folder方法,但它只是用来切换zip对象内部的虚拟路径,比如zip.folder("img").file('a.txt')就是在zip中添加一个img子目录,在下面创建a.txt,效果等同于zip.file("img/a.txt")。这里还需要注意的是,文件的内容都需要手动添加,如果仅仅是zip.file("a.txt");只是在zip对象中创建了内容为空的txt文件,而且它只是存在于内存中,需要写文件操作后才会真正存到磁盘。

更多 APIhttps://github.com/Stuk/jszip

Use archiver and unzip

archiver很强大,支持zip格式tar格式,只需要提供路径就可以压缩已存在的文件夹。

压缩:

// require modules
var fs = require("fs");
var archiver = require("archiver");

// create a file to stream archive data to.
var output = fs.createWriteStream(__dirname + "/example.zip");
var archive = archiver("zip", {
  zlib: { level: 9 }, // Sets the compression level.
});

// pipe archive data to the file
archive.pipe(output);

// append a file from stream
var file1 = __dirname + "/file1.txt";
archive.append(fs.createReadStream(file1), { name: "file1.txt" });

// append a file from string
archive.append("string cheese!", { name: "file2.txt" });

// append a file from buffer
var buffer3 = Buffer.from("buff it!");
archive.append(buffer3, { name: "file3.txt" });

// append a file
archive.file("file1.txt", { name: "file4.txt" });

// append files from a sub-directory and naming it `new-subdir` within the archive
archive.directory("subdir/", "new-subdir");

// append files from a sub-directory, putting its contents at the root of archive
archive.directory("subdir/", false);

// append files from a glob pattern
archive.glob("subdir/*.txt");

// finalize the archive (ie we are done appending files but streams have to finish yet)
// &#39;close&#39;, &#39;end&#39; or &#39;finish&#39; may be fired right after calling this method so register to them beforehand
archive.finalize();

解压

var fs = require("fs");
var unzip = require("unzip");

fs.createReadStream("archiver-unzip.zip").pipe(
  unzip.Extract({ path: "unarchive" })
);

更多APIhttps://github.com/archiverjs/node-archiver

Linux上zip/unzip命令

apt-get install zip unzip

解压缩zip文件

语  法:unzip [-cflptuvz][-agcjlmnoqsvx][-P 0416a0cf3c48fe3f4569ffb86fe4ec7e][.zip文件][文件][-d da0bd984eba5457db42d205ec9e233d3][-x 70120f5feaf4a4e4f18aa0e9e4edf7f7] 或 unzip [-Z]

补充说明:unzip为.zip压缩文件的解压缩程序。

参  数:

-c将解压缩的结果显示到屏幕上,并对字符做适当的转换。

-f更新现有的文件。

-l显示压缩文件内所包含的文件。

-p-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。

-t检查压缩文件是否正确。

-u-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。

-v执行是时显示详细的信息。

-z仅显示压缩文件的备注文字。

-a对文本文件进行必要的字符转换。

-b不要对文本文件进行字符转换。

-C压缩文件中的文件名称区分大小写。

-j不处理压缩文件中原有的目录路径。

-L将压缩文件中的全部文件名改为小写。

-M将输出结果送到more程序处理。

-n解压缩时不要覆盖原有的文件。

-o不必先询问用户,unzip执行后覆盖原有文件。

-P0416a0cf3c48fe3f4569ffb86fe4ec7e 使用zip的密码选项。

-q执行时不显示任何信息。

-s将文件名中的空白字符转换为底线字符。

-V保留VMS的文件版本信息。

-X解压缩时同时回存文件原来的UID/GID

[.zip 文件]指定.zip压缩文件。

[文件]指定要处理.zip压缩文件中的哪些文件。

-dda0bd984eba5457db42d205ec9e233d3指定文件解压缩后所要存储的目录。

-x70120f5feaf4a4e4f18aa0e9e4edf7f7指定不要处理.zip压缩文件中的哪些文件。

-Z unzip-Z等于执行zipinfo指令。

基本用法是:zip [参数][打包后的文件名] [打包的目录路径]

参数:

-a将文件转成 ASCII 模式

-F尝试修复损坏的压缩文件

-h显示帮助界面

-m

Utiliser adm-zip

adm-zip prend en charge les fonctions archive et unarchive pour un ou plusieurs fichiers ou un dossier entier . Très simple et pratique à utiliser. 🎜
zip -r test.zip abc.txt dir1
#解压缩:
```sh
unzip test.zip
🎜🎜Plus d'API https://github.com/cthackers/adm-zip🎜🎜

Utilisez JSZip

🎜Lorsque vous utilisez cette bibliothèque, vous devez ajouter les fichiers un par un à zip, et le contenu doit être ajouté manuellement, puis l'opération d'écriture de fichier est utilisée pour convertir l'objet <code>zip dans la mémoire en stockage physique. Donc, si c'est pour un dossier entier, c'est très gênant. Vous devez parcourir le dossier🎜
unzip abc\?.zip
🎜JSZip a également une méthode folder, mais elle n'est utilisée que pour switch zip, tel que zip.folder("img").file('a.txt') est ajouté dans zip Un sous-répertoire <code>img, créez a.txt ci-dessous, l'effet est équivalent à zip.file("img/a.txt"). Il convient également de noter ici que le contenu du fichier doit être ajouté manuellement. S'il s'agit simplement de zip.file("a.txt") ; Objet Le contenu est un fichier txt vide, il n'existe que dans la mémoire et doit être écrit dans le fichier avant d'être réellement enregistré sur le disque. 🎜🎜🎜Plus d'API https://github.com/Stuk/jszip🎜🎜🎜Utilisez l'archiveur et décompressez🎜🎜archiver est très puissant et prend en charge le format zip tar , il vous suffit de fournir le chemin pour compresser un dossier existant. 🎜🎜Compression : 🎜
unzip -v test.zip
🎜Décompression🎜
unzip -t test.zip
🎜🎜Plus d'API https://github.com/archiverjs/node-archiver🎜🎜

commande zip/unzip sous Linux

unzip -j music.zip
🎜Décompresserzip Fichier🎜🎜🎜Syntaxe : décompresser [-cflptuvz][-agcjlmnoqsvx][-P 43666b0777775e6257a48260fd58c9ae][fichier .zip][fichier][-d 8f22daf8eb4b431c45988a7155d9d2ec][-x 5d62f960439c8badecd6097bae925838] ou unzip [-Z]🎜🎜🎜Explication supplémentaire : <code>unzip est un programme de décompression pour les fichiers compressés .zip. 🎜🎜Paramètres : 🎜🎜-c affiche le résultat de la décompression à l'écran et convertit les caractères de manière appropriée. 🎜🎜-fMettre à jour les fichiers existants. 🎜🎜-lAffiche les fichiers contenus dans le fichier compressé. 🎜🎜-p est similaire au paramètre -c Il affichera le résultat de la décompression à l'écran, mais n'effectuera aucune conversion. 🎜🎜-t Vérifiez si le fichier compressé est correct. 🎜🎜-u est similaire au paramètre -f, mais en plus de mettre à jour les fichiers existants, les autres fichiers du fichier compressé seront également décompressés dans le répertoire. 🎜🎜-v affiche des informations détaillées lors de l'exécution. 🎜🎜-zAffiche uniquement le texte du commentaire du fichier compressé. 🎜🎜-a Effectuez la conversion des caractères nécessaire sur les fichiers texte. 🎜🎜-bN'effectuez pas de conversion de caractères sur les fichiers texte. 🎜🎜-CLes noms de fichiers dans les fichiers compressés sont sensibles à la casse. 🎜🎜-j ne traite pas le chemin du répertoire d'origine dans le fichier compressé. 🎜🎜-L Changez tous les noms de fichiers du fichier compressé en minuscules. 🎜🎜-M envoie les résultats de sortie au programme more pour traitement. 🎜🎜-nN'écrasez pas le fichier original lors de la décompression. 🎜🎜-oPas besoin de demander d'abord à l'utilisateur, unzip écrasera le fichier original après l'exécution. 🎜🎜-P16398288f261faa759d47caefd275b5c Utilisez l'option de mot de passe de zip. 🎜🎜-q n'affiche aucune information lors de l'exécution. 🎜🎜-sConvertit les caractères d'espacement dans les noms de fichiers en caractères de soulignement. 🎜🎜-V conserve les informations de version du fichier de VMS. 🎜🎜-X enregistrera également le UID/GID original du fichier lors de la décompression. 🎜🎜[.zip file]Spécifie le fichier compressé .zip. 🎜🎜[file]Spécifie quels fichiers du fichier compressé .zip doivent être traités. 🎜🎜-d7b799fe73e35dcfdc019b13f54de80e5Spécifie le répertoire où le fichier sera stocké après décompression. 🎜🎜-xa49806b1b35266a135cf3c07a1b250a6 spécifie quels fichiers du fichier compressé .zip ne doivent pas être traités. 🎜🎜-Z unzip-Z équivaut à exécuter la commande zipinfo. 🎜🎜🎜L'utilisation de base est : zip [paramètres][nom du fichier compressé] [chemin du répertoire compressé]🎜🎜🎜Paramètres : 🎜🎜-aConvertir le fichier en mode ASCII🎜🎜-F Essayez de réparer le fichier compressé endommagé🎜🎜-hAffichez l'interface d'aide🎜🎜-mAprès avoir compressé le fichier, supprimez le fichier source🎜

-n特定字符串 不压缩具有特定字尾字符串的文件

-o将压缩文件内的所有文件的最新变动时间设为压缩时候的时间

-q安静模式,在压缩的时候不显示指令的执行过程

-r将指定的目录下的所有子目录以及文件一起处理

-S包含系统文件和隐含文件(S 是大写)

范 例:

zip命令可以用来将文件压缩成为常用的zip格式。unzip命令则用来解压缩zip文件。 压缩文件abc.txt和一个目录dir1,名字test.zip

zip -r test.zip abc.txt dir1
#解压缩:
```sh
unzip test.zip

目录下有abc1.zipabc2.zipabc3.zip,使用通配符

unzip abc\?.zip

注释:?表示一个字符,如果用*表示任意多个字符。 不解压,只查看内容

unzip -v test.zip

验证zip文件完成性,查看网上下的包包是不是已经下载完了

unzip -t test.zip

我用-v选项发现music.zip压缩文件里面有很多目录和子目录,并且子目录中其实都是歌曲mp3文件,我想把这些文件都下载到第一级目录,而不是一层一层建目录:

unzip -j music.zip

推荐学习:JS视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer