js压缩文件或文件夹

4 篇文章 0 订阅

JS压缩文件/文件夹

首先说一下,这里的 JS压缩文件/文件夹 不是各位想的那么美好🤣,想着接下来博主写个js的压缩方法,我拷贝走直接用就万事大吉的同志,很遗憾告诉你们,这篇博客说的不是这样的。

文章有点长,耐心看完文章的,基本应该大概率都能搞定。

前置解释

  1. js 不是原生JavaScript,我说的这个一般是用来集成到用JavaScript框架写的项目中,或者是node也行。
  2. 压缩需要用到一个压缩软件7-zip,当然,对这个软件不了解的人可以去了解一下,网上一搜,一大堆解释,当然7-zip也可以集成到项目中,这个不用担心只能在本机用的问题。
  3. 接下来有些地方可能会需要用到一些文件的绝对路径,获取一个文件的绝对路径也不是一个麻烦事,各位可以自行寻找一个方法即可。【注:本人用的是 electron 框架,所以,,,就很方便。😁】

  • 注:这里是我天真了, 我初始以为获取一个用户选择文件的绝对路径是个很简单的事😂,没想到对于前端来说根本没得搞。所以,我又写了一篇曲线救国的策略,这是传送门:js获取用户选择的文件路径[曲线救国]

7-zip 下载地址

英文官网 中文官网

大家自行下载一个就行了,也不大,整个程序装下来也就 几M左右,而且,我们需要集成的只是安装后程序中的两个文件而已,所以那些担心会大幅增加项目打包体积的同志,可以放宽心啦。

7-zip 安装文件解释

这个还是必要解释一下的,毕竟这也算使用前的了解,过了这一步,我们就可以简单了解 7-zip的使用方式了。

7-zip安装完毕后,安装目录一般是这样的:

--- Lang 文件夹
------- *.txt 各种txt文件
--- 7z.dll dll文件
--- 7z.exe exe文件
--- ... 剩下的就看自己文件目录吧。

这些文件分别是啥意思呢?解释如下【不想看的可以跳过👀】:

  • 7zFM.exe7-Zip 文件管理器的主 UI,直接从开始菜单打开 7-Zip 时的 UI 界面。依赖 7z.dll
  • 7zG.exe7-ZipGUI 模块,需要通过命令行指定参数调用。依赖 7z.dll
  • 7-zip.dll:与 Windows Shell 以及 7zFM.exe 集成。
  • 7z.exe7-Zip 的命令行版本,需要通过命令行指定参数调用。
  • 7z.dll7-Zip 的核心执行引擎。
  • 7z.sfxSFX 模块(Windows 版本)。
  • 7zCon.sfxSFX 模块(控制台版本)。
  • 7-zip.chm7-Zip 的帮助说明文件。

这些文件意思呢,我也是翻阅了一些文章,为大家收集的。

给大家贴一下人家其中一篇写的解释的博客链接:文件解释博客链接

7-zip 命令解释与集成

前面我也说了,我们是要把 7-zip 集成到项目里面的,所以我们肯定要用命令行的方式去调用 7-zip的, 命令行版本文件是 7z.exe

所以我们将 7z.exe7-zip的核心执行引擎文件 7z.dll文件拷到项目里即可使用完整的命令行版本的 7-zip 去压缩文件了。

接下来,我主要说一下7-zip压缩命令解压命令

首先有一个大前提和一个注意:

  • 前提:命令的使用必须在7-zip的环境下。通俗的讲:必须在存放 7-zip 命令行文件的根目录下执行命令才行。

    就比如,在项目 src/plugin/7z/下存放的命令行文件,那么我们压缩命令的执行,必须要定位到 7z 这个目录去执行才可以。

  • 注意:7-zip貌似不支持 相对路径,所以如果是一个压缩文件路径是一个相对路径,估计是不行的。

    就比如:7z a -tzip E:/compress.zip temp/ 【大家先不用理解命令啥意思,一会我会解释】,这里的 temp/ 我的本意思压缩根目录下 temp文件夹,但是 7-zip 会直接报错,所以建议使用时,路径最好使用绝对路径

压缩命令

命令:7z a -tzip -p123456 E:/compress.zip E:/temp/

命令解释:

将 E盘 temp文件夹 下的所有文件压缩成 zip 格式,压缩的位置在 E 盘,文件名称是 compress.zip

命令拆开解释:

  • 7z是缩写 就是指 7z.exe,所以命令中的 7z 也可以替换成 7z.exe,就是 7-zip 的命令行版本
  • a7-zip 的命令关键字,意思是添加,即将文件添加到存档,具体解释或者其他命令关键字可看 7-zip.chm手册。
  • -t 指定压缩的格式,-tzip指定压缩格式为zip-t7z指定压缩格式为7z,压缩格式必须为7-zip支持的格式才行。
  • -p设置压缩密码,123456是设置的密码,这样我们压缩的文件就是一个加密文件,当然命令行提取时也需要 -p指定解压密码。
  • E:/compress.zip 指定压缩到的路径,7-zip为自动为我们创建zip文件,所以压缩路径要具体到文件名,E:/temp/ 指定的是被压缩文件的路径。
解压命令

命令:7z x E:/compress.zip -p123456 -oE:/temp/ -aoa

命令解释:

将 E盘下的 compress.zip 解压到 E盘下的temp文件夹

  • x是命令关键字,指以完整路径提取,就是压缩的时候文件夹是个怎样的嵌套格式,提取出来文件就是怎样的嵌套格式。
    • 7-zip 还有一个 e 关键字也是提取,上面的命令,将 x 替换成 e 完全OK,区别就是 e 提取的文件进行了扁平化处理,会把所有文件以及文件夹提取到一个目录里。
  • -p指定的是解压密码。讲解压缩命令时有过解释。
  • -o指定的是输出目录,解压到那个文件夹。
  • -aoa指在静默【没有提示】的情况下 会用解压的文件 覆盖现有的与解压文件冲突的文件。[冲突就是文件已经存在了。]

OK,最简单的解释已经解释完毕了,当然7-zip还有好多其他用法,比如:

我们还可以指定提取的文件,比如将 *.txt 的文件从 compress.zip 压缩包里提取出来:

7z x E:/compress.zip -oE:/temp/ *.txt -r

这里的-r是递归子目录的开关,可以指定在命令行上处理通配符和文件名的方法,写一个-r,默认就是开启递归子目录。

用法多多,各位还是要看 7-zip.chm 手册啊


7-zip 命令行调用方式

上面我乌拉乌拉说了那么多,最重要的一步没说,那就是怎么调用命令。

其实我本来是没想说的,但是呢,怕有些同学不知道,所以这里在说一下。

命令行,命令行,那最简单的调用方式在哪里,毫无疑问:CMD ,对吧:

  • 打开CMD
  • 定位到7-zip命令行文件所在的文件夹
  • 然后后面写上解压缩命令
  • 回车执行就完事了

当然,这种方式适合自己玩,放在项目里,不太适合,还得写bat文件,麻烦。

所以,项目里怎么执行命令行?那当然首选 exec方法:

  • execnode子进程的一个方法

  • 使用时,我们只需要引入它:

    const { exec } = require('child_process');
    
  • 然后:

    const command = "7z x E:/compress.zip -p123456 -oE:/temp/ -aoa";
    exec(cmmand, {cwd: "plugin/7z"}, (err, _)=>{
        if(err) {
            console.log('解压出错');
            return;
        }
        console.log('解压成功');
    });
    

    那么有人该问了? {cwd: "plugin/7z"} 是啥意思?

    • 阿西吧,兄弟怕是忘了我前面说的 一个大前提
    • cwd 配置指定的就是 当前子进程的工作目录,所以我们此目录指定到存放 7-zip 命令文件的目录下,那么就刚好满足了我说的那一个大前提。

来个传送门:node 中的 exec 解释


所以:开发环境下使用是搞定了,那么生产环境呢?各位同学要记得瞅一眼呐,打包后的目录和开发环境下可能是有所不同的,所以,怎么办?

各位可以自己写一个开发/生产,不同环境下的路径的处理方法,也可以去百度,一搜一堆呢。

啊,到此2139词,我为各位操碎了心。继续。。。🤷‍♂️


7-zip.chm 说明文件翻译

为了照顾与我一样,英语小渣渣,所以这里也提供一个对 7-zip.chm 的翻译方法,毕竟全英文的 chm 手册,对我这种中国人不太友好呢。。。

【注:此方法网上有,我只是搬运功,不过此方法我测试过,好用,够用,为大家踩坑。】

  1. 打开cmd,输入命令

    hh.exe -decompile D:/7-zip-chinese D:/7-zip.chm
    
    # 解释如下
    # D:/7-zip-chinese 是 7-zip.chm 进行转义后生成的文件目录,可以自己设置想把转义的目录位置
    # D:/7-zip.chm 是 chm 文件所在的目录
    
    # 这不仅可以编辑 7-zip.chm 其他任何 chm 基本也可以,如果有不行的。。[当我没说前面的话]
    
  2. 生成后7-zip-chinese 文件夹下会生成一个htm 文件,这个可以在 Chrome 浏览器或者其他浏览器中运行的网页文件。

  3. 使用浏览器的翻译,进行翻译即可。

网上也有人把翻译贴出来了,就是看着费劲点,不如自己翻译,我给大家贴一篇参考一下:7z命令中文文档博客


OK,结束😎。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值