(压缩包在本地目录或由链接请求)使用jszip解压文件或compressing解压文件到指定目录,写个node脚本
使用jszip解压文件与compressing解压zip文件到指定目录
一、介绍jszip和compressing模块
jszip和compressing模块都是可以压缩和解压缩zip文件,都可以通过npm直接下载模块。
- compressing
- 支持解压的文件类型更多,目前支持zip、tar、gzip、tgz。
- npm官网的案例写的很明白: compressing案例
- 可以直接找到压缩包所在目录,解压到指定目录,很方便
- jszip
- 下载量惊人
- 跨平台
- 仅支持zip
- 官网例子有点少,方法名很简略有点云里雾里,但是要努力克服 jszip案例
二、使用jszip和compressing模块
2.1 这里我给出我的3个不同需求,分别在下面解决:
1. 我想将一个目录A下的压缩包解压到指定目录B。
2. 我想将一个目录A下的压缩包解压替换指定目录B的文件目录。
3. 我想从链接请求到压缩包,将压缩包替换指定目录B的文件目录。
2.2添加node脚本
- 在
package.json
文件中的script
中添加"指令名": "node 文件名A.js"
"handler:gojs": "node gojsHandler.js"
- 在项目根目录中创建
gojsHandler.js
(文件名A)文件。 - 如果项目使用typescript,取消检查可在文件最上面添加以下注释:
/* eslint-disable no-undef */
/* eslint-disable @typescript-eslint/no-var-requires */
- 完成以下任意需求代码。
- 运行
npm run 指令名
:npm run handler:gojs
2.3需求解决
需求1:
思路:
- 安装:
npm i compressing
- 使用compressing的一个方法直接找到指定目录A,解压到指定目录B。
实现代码:
const compressing = require('compressing');
const projectDir = __dirname;//解压函数
/**
* fileName:压缩文件相对项目目录的路径,`${projectDir}/${fileName}`是完整的压缩包路径
* mbDir:目标目录B,想要解压到的位置
*/
function unzipSync(fileName,mbDir){return new Promise((resolve,reject)=>{//解压gojs.zipcompressing.zip.uncompress(`${projectDir}/${fileName}`, mbDir).then((res) => {resolve('成功解压到node_modules');}).catch(() => {reject('解压失败');});})
}//执行
(function(){unzipSync('gojs.zip',__dirname+'/node_modules').then(res=>{console.log(res);}).catch(err=>{console.log(err);})
})()
需求2:
思路:
- 安装:
npm i compressing
- 删除指定目录B的文件目录。
- 使用compressing的一个方法直接找到指定目录A,解压到指定目录B。
注意事项:
- 解决删除和解压的先后顺序不清楚问题,使用promise。
- 删除前需要判断文件夹是否存在。要检查文件是否存在而不对文件进行操作,建议使用
fs.access()
实现代码:
const fs = require('fs');//删除文件
/**
* fileDir:要删除文件的指定目录B
*/
function delFilesSync(fileDir){return new Promise((resolve,reject)=>{//1.判断gojs文件夹是否存在fs.access(fileDir,fs.constants.F_OK, (err) => {if(!err){//2.删除gojs文件夹。要检查文件是否存在而不对文件进行操作,建议使用fs.access()fs.rmdir(fileDir,{recursive : true},err=>{if (err) {reject('删除gojs文件失败'+err);}else {resolve('删除gojs文件成功')}})}else{resolve(`${fileDir}文件不存在,不需删除`)}});})
}//解压函数
function unzipSync(fileName,mbDir){return new Promise((resolve,reject)=>{//3.解压gojs.zipcompressing.zip.uncompress(`${projectDir}/${fileName}`, mbDir).then((res) => {resolve('成功解压到node_modules');}).catch(() => {reject('解压失败');});})
}//执行
(function(){//删除delFilesSync(gojsDir).then(res=>{console.log(res);//解压到指定文件目录unzipSync('gojs.zip',__dirname+'/node_modules').then(res=>{console.log(res);}).catch(err=>{console.log(err);})}).catch(err=>{console.log(err);})
})()
需求3:
思路:
- 安装:
npm i jszip
和npm i axios
。 axios.get
获取到压缩包文件。- 删除指定目录B的文件目录。
- 使用 jszip 解压文件获取文件信息。
- 将文件存到指定目录B中,遍历判断是否文件存在是否是文件夹,创建文件目录,创建文件。
注意事项:
- axios自己使用的就是promise,获取到文件就行。
- 解决删除和解压的先后顺序不清楚问题,使用promise。
- 删除前需要判断文件夹是否存在。要检查文件是否存在而不对文件进行操作,建议使用
fs.access()
。 - 想要实现文件夹不存在时创建文件夹,但是如果文件不存在fs.statSyn就会报错。可以使用try包裹,在接收到
fs.statSyn
报错时即文件不存在,返回false,可创建
实现代码:
/* eslint-disable no-undef */
/* eslint-disable @typescript-eslint/no-var-requires */
const { default: axios } = require('axios');
const fs = require('fs');
const JSZip = require('jszip');
const path = require('path');
const gojsDir = __dirname+'/node_modules/gojs';// let zip = new JSZip();
//axios请求压缩包
function getZipFiles(zipUrl) {return new Promise((resolve,reject)=>{axios.get(zipUrl,{method:'get',url:zipUrl,responseType:'arraybuffer'// 类型必须为arraybuffer,loadAsync加载其他类型资源会出问题,比如资源乱码}).then(res=>{//解压JSZip.loadAsync(res.data).then(res=>{resolve({msg:'解压成功',files:res.files});}).catch(err=>{reject('解压失败!'+err)})}).catch(err=>{reject('数据请求失败!'+err);})})
}//是否是文件夹
/**
* 想要实现文件夹不存在时创建文件夹,但是如果文件不存在fs.statSyn就会报错
* fs.statSyn返回的就是stat实例,也就是文件信息,stat在获取文件信息时,文件不存在就会报错
* 那么使用try包裹,接收到错误时即文件不存在,返回false,可创建
*/
function isDirSync(curPath){try{const stat = fs.statSync(curPath);return stat.isDirectory() //是否是文件夹}catch(err){return false; //文件不存在}
}//保存解压的文件
function saveZipFiles(files,savePath) { // 获取解压后的文件try {for (const filename of Object.keys(files)) {//没有文件夹先创建,返回完整地址destconst dest = path.join(__dirname, savePath, filename);// console.log(files[filename].dir && !isDirSync(dest));if (files[filename].dir && !isDirSync(dest)) {//满足创建文件夹的条件fs.mkdirSync(dest, {recursive: true});} else {files[filename].async('nodebuffer').then(content => fs.writeFileSync(dest, content));}}} catch (error) {console.error('保存解压文件失败!', error.message);return error;}
}//删除文件
function delFilesSync(fileDir){return new Promise((resolve,reject)=>{//1.判断gojs文件夹是否存在fs.access(fileDir,fs.constants.F_OK, (err) => {if(!err){//2.删除gojs文件夹fs.rmdir(fileDir,{recursive : true},err=>{if (err) {reject('删除gojs文件失败'+err);}else {resolve('删除gojs文件成功')}})}else{resolve(`${fileDir}文件不存在,不需删除`)}});})
}//jszip
(function(){delFilesSync(gojsDir).then(res=>{console.log(res);//获取解压文件getZipFiles('这里写要下载zip的链接').then(res=>{console.log(res.msg);//保存解压文件const files = res.files;saveZipFiles(files,'/node_modules')}).catch(err=>{console.log(err);})}).catch(err=>{console.log(err);})
})()
(压缩包在本地目录或由链接请求)使用jszip解压文件或compressing解压文件到指定目录,写个node脚本相关推荐
- python 实现统计ftp服务器指定目录下文件夹数目、文件数目及所有文件大小 本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏。 主要要求:指定目录下,文件夹数目/文件数目/所有文件大小
python 实现统计ftp服务器指定目录下文件夹数目.文件数目及所有文件大小 本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏. 主要要求:指定目录下,文件夹数目/文件数目/所有文件大小,类 ...
- 如何把C盘里的文件默认位置更改到D盘指定目录?
如何把C盘里的文件默认位置更改到D盘指定目录? 1.打开运行,输入 %HOMEPATH% 2.以"桌面"文件转移到D盘目录为例(其他文档类比进行操作) 3.鼠标右键"桌面 ...
- 将linux目录中的特定文件推送到手机_linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹...
linux复制指定目录下的全部文件到另一个目录中 复制指定目录下的全部文件到另一个目录中 文件及目录的复制是经常要用到的.linux下进行复制的命令为cp. 假设复制源目录 为 dir1 ,目标目录为 ...
- c# 遍历文件夹深度_C#.NET中遍历指定目录下的文件(及所有子目录及子目录里更深层目录里的文件)...
//遍历一个目录下所有的文件列表,代码实例 DirectoryInfo dir = new DirectoryInfo(folderName); var list = GetAll(dir); /// ...
- php删除目录文件内容,php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码...
搜索热词 web 开发中我们可能会碰到需要将某个目录下的所有文件清空,但不删除这个目录下的子目录(当然也不会删除被删除的根目录)的情况.那么对于这种只删除文件而不删除目录的方法,你是如何处理的呢?下面 ...
- Linux 删除指定目录下的文件/删除文件
文章目录 删除当前目录下的所有类型的文件 删除指定目录下的所有类型的文件 用 find 命令在当前目录下查找普通文件并删除 用 find 命令在指定目录下查找普通文件并删除 用 find 命令的处理动 ...
- Java 文件操作二(重命名、设置只读、是否存在、指定目录中创建文件、获取文件修改日期、创建文件、文件路径比较)
文件重命名 import java.io.File;public class Main {public static void main(String[] args) {File oldName = ...
- Python_删除/创建指定目录及其下所有子目录的文件,该文件记录当前文件夹的内容...
Python_删除/创建指定目录及其下所有子目录的文件,该文件记录当前文件夹的内容 Python_删除/创建指定目录及其下所有子目录的文件,该文件记录当前文件夹的内容 - IGod接口 - 博客园 P ...
- Java实现指定目录下的文件查找
Java实现指定目录下的文件查找 入门Java实现文件的查找功能较为简单,主要有以下两种: 1.给出文件名,查找目录及其子目录中是否存在 2.给出后缀名,查找目录及其子目录中相关的文件 题型一: 题目 ...
最新文章
- Michael A. Cusumano
- 中国和英国的在学生创业环境上的区别
- linux python wps doc 转 txt_耗时一周尝试踩坑,整理了一些Python实用知识点
- 即时通讯软件测试方法,Linux系统环境下如何使用aMsn即时通讯
- 如何修改新浪微博对其他应用的授权
- sp.net MVCJQuery 应用(表单验证)
- MFC DLL向导(二)
- linux下main函数的返回值问题
- sql server 2008完全卸载工具
- 我的世界服务器怎么做无限的弓,我的世界怎么用命令方块做无限弓?
- HCIP——IPv6地址基础
- 2022-2028全球与中国侧装车载摄像头市场现状及未来发展趋势
- mezzanine安装和使用
- adb不是内部命令和sudo: adb: command not found
- python 推箱子实验开发报告,python实现推箱子游戏
- 尘埃粒子计数器帮助实时监测半导体车间空气中的粒子数
- mac桌面壁纸_在Mac上从命令行设置桌面墙纸
- 面试题目总结(CNN)
- 工作3年,看啥资料能月薪30K?
- input框不能输入
热门文章
- 基于 React video 视频打点
- 学籍信息管理系统c语言编程,学生学籍信息管理系统C语言设计.doc
- 立体五子棋中的一个有趣的bug
- ffmpeg学习日记604-指令-将视频格式转为H264格式
- 群晖NAS教程(十七)、利用Docker安装网心云容器魔方
- 华为的android文件夹在哪,安卓手机文件目录详解
- 《Linux系统调用:opendir,readdir,closedir,rewinddir》
- 关于单片机IO口输入输出的理解!
- 使用C++计算3次牛顿插值法
- ## Django项目命令启动