背景:一方面,部分系统对文件的私密性和安全性要求较高,实现前端加密打包,服务端不存储密码 ,下载时手动输入密钥并解压文件。另一方面,传输压缩包到客户端,节约了带宽,节约了传输时间。
使用的库: zip.js
- Support of the Zip64 format
- Support of WinZIP AES and PKWare ZipCrypto encryption
- Support of simultaneous reads and writes to one or more zip files
- Integrated worker pool manager
- No dependencies
安装
npm install @zip.js/zip.js
引用
import * as zip from "@zip.js/zip.js"; //ES6 module
const zip = require("@zip.js/zip.js"); // or CommonJS module
实现
以下为vue的实现方案:
加密上传文件
import * as zip from '@zip.js/zip.js'
...
...
methods: {
async handleZipFile () {
const controller = new AbortController()
const signal = controller.signal
var zipWriter = new zip.ZipWriter(new zip.BlobWriter('application/zip'))
await Promise.all(_.map(this.files, async (file) => {
await zipWriter.add(file.name, new zip.BlobReader(file.raw), {
bufferedWrite: true,
password: this.password,
signal,
zipCrypto: true,
onprogress: (index, max) => {