1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > (压缩包在本地目录或由链接请求)使用jszip解压文件或compressing解压文件到指定目录

(压缩包在本地目录或由链接请求)使用jszip解压文件或compressing解压文件到指定目录

时间:2020-06-03 05:43:32

相关推荐

(压缩包在本地目录或由链接请求)使用jszip解压文件或compressing解压文件到指定目录

使用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 jszipnpm i axiosaxios.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脚本

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。