安装依赖
npm i jszip
前提准备
准备好一个压缩包,格式为zip,存放两张png图片。

代码实现
<template><h1>JSZip,预览压缩包中的文件</h1><img v-for="(n,m) in picArr.arr":src="n":style="{width:'200px'}":key="m"><div>需要压缩的包(zip)</div><input type="file"@change="fn">
</template>
<script setup>
import { reactive } from '@vue/reactivity'
import JSZip from 'jszip'
let picArr = reactive({ arr: [] })
const fn = (e) => {// console.log(e.target.files[0]);let zip = new JSZip()// loadAsync() 读取现有的zip,并在当前文件夹级别合并当前JSZip对象中的数据// 如果两个具有相同的名称,则加载的一个将替换另一个zip.loadAsync(e.target.files[0]).then(zipdata => {// console.log(zipdata.files);for (let n in zipdata.files) {// console.log(zipdata.files[n]);
// .file(name) 读取文件在当前目录zipdata// 获得指定文件里面的文件名字.file(zip.files[n].name)// 指定返回结果类型.async('base64').then(res => {// 打印base64// console.log(res);let imgBase64 = 'data:image/jpeg;base64,' + respicArr.arr.push(imgBase64)})}})
}
</script>
<style scoped>
div {margin: 0 auto;
}
</style>
结果显示
代开浏览器页面点击按钮上传压缩包。

结果会在浏览器页面中显示压缩包里的图片内容。

举一反三,如果压缩包里面的内容是文本信息呢,应该怎么显示?
关键部分:async('text') 实现对文本内容的解析。
准备一个文本压缩包如下。

代码修改如下
<template><h1>JSZip,预览压缩包中的文件</h1><img v-for="(n,m) in picArr.arr":src="n":style="{width:'200px'}":key="m"><div>需要压缩的包(zip)</div><input type="file"@change="fn"><h2>{{ zipContent }}</h2>
</template>
<script setup>
import { reactive, ref } from '@vue/reactivity'
import JSZip from 'jszip'
let picArr = reactive({ arr: [] })
let zipContent = ref('')
const fn = (e) => {// console.log(e.target.files[0]);let zip = new JSZip()// loadAsync() 读取现有的zip,并在当前文件夹级别合并当前JSZip对象中的数据// 如果两个具有相同的名称,则加载的一个将替换另一个zip.loadAsync(e.target.files[0]).then(zipdata => {// console.log(zipdata.files);for (let n in zipdata.files) {// console.log(zipdata.files[n]);
// .file(name) 读取文件在当前目录zipdata// 获得指定文件里面的文件名字.file(zip.files[n].name)// 指定返回结果类型.async('text').then(res => {// 打印文本信息console.log(res);zipContent.value = res})}})
}
</script>
<style scoped>
div {margin: 0 auto;
}
</style>
结果显示

总结
通过上面的案例代码,可以举一反三进行预览显示视频和音频等其他类型文件,可以仔细了解JSZip官网中的api。
相关jszip的api 方法 可以查询https://stuk.github.io/jszip。