在前端开发中,我们时常需要处理文件上传和下载的功能。有时,用户可能希望将多个文件打包成一个zip文件以便于下载。今天,我将分享一个使用Vue3和JSZip库在浏览器端实现zip文件压缩的示例。

首先,我们需要安装JSZip库。如果你使用的是npm,可以通过以下命令进行安装:

npm install jszip

在Vue3组件中,我们可以定义一个响应式引用fileDatas来存储用户上传的文件信息。同时,我们还需要几个其他的引用来控制压缩选项和进度。

<script lang="ts" setup>
import { ref } from 'vue'
import JSZip from 'jszip'
import { saveAs } from 'file-saver' // 注意这里我假设你已经有file-saver库了 interface FileData {
file: File
fileName: string
} const fileDatas = ref<FileData[]>([])
const isCompress = ref(false) // 是否启用压缩
const compressionLevel = ref(6) // 压缩级别
const packagingPercentage = ref(0) // 压缩进度 // 文件上传处理函数
const fileUpload = (file: File) => {
fileDatas.value.push({
file,
fileName: file.name
})
} // 打包为zip文件
const packageAsZip = async () => {
packagingPercentage.value = 0 const zip = new JSZip()
fileDatas.value.forEach((fileData) => {
zip.file(fileData.fileName, fileData.file)
packagingPercentage.value += 100 / fileDatas.value.length // 简化进度计算
}) let content: Blob if (isCompress.value) {
content = await zip.generateAsync({
type: 'blob',
compression: 'DEFLATE',
compressionOptions: { level: compressionLevel.value }
})
} else {
content = await zip.generateAsync({ type: 'blob' })
} saveAs(content, 'compressed_files.zip')
}
</script> <template>
<div>
<!-- 假设你有一个文件上传组件CommonFileUploadWithDirectory -->
<CommonFileUploadWithDirectory @upload="fileUpload" /> <!-- 压缩按钮 -->
<button @click="packageAsZip">压缩为ZIP</button> <!-- 文件列表展示 -->
<div v-if="fileDatas.length > 0" class="file-list">
<div v-for="(fileData, index) in fileDatas" :key="index" class="file-list-item">
<!-- 假设你有一个删除按钮组件,这里用了一个简单的删除逻辑 -->
<button @click="fileDatas.splice(index, 1)">删除</button>
<span>{{ fileData.fileName }}</span>
</div>
</div>
</div>
</template> <style scoped>
/* 样式省略 */
</style>

在上面的代码中,我们定义了一个文件上传处理函数fileUpload,每当用户上传一个文件时,就将文件信息添加到fileDatas数组中。我们还定义了一个packageAsZip函数,该函数会遍历fileDatas数组中的每个文件,并使用JSZip将它们添加到zip文件中。然后,根据isCompress的值决定是否启用压缩,并生成一个Blob对象。最后,使用file-saver库的saveAs函数将Blob对象保存为zip文件。

注意,我在计算压缩进度时进行了简化,直接假设每个文件占据相等的进度。在实际应用中,你可能需要根据文件的大小或压缩的实际情况来更精确地计算进度。

实际案例:https://anttoolbox.cn/tools/zip,这里我参与了开发~~~

使用Vue3在浏览器端进行zip文件压缩的更多相关文章

  1. angulaijs中的ng-upload-file与阿里云oss服务的结合,实现在浏览器端上传文件到阿里云(速度可以达到1.5M)

    2015-10-26 angularjs结合aliyun浏览器端oos文件上传加临时身份验证例子 在服务端获取sts 源码: public class StsServiceSample { // 目前 ...

  2. nginx优化:使用expires在浏览器端缓存静态文件

    一,nginx中expires指令的作用 网站的图片等静态文件一旦发布,通常很少改动, 为了减小对服务器请求的压力,提高用户浏览速度, 我们可以设置nginx中的expires, 使用户访问一次后,将 ...

  3. Zip文件压缩(加密||非加密||压缩指定目录||压缩目录下的单个文件||根据路径压缩||根据流压缩)

    1.写入Excel,并加密压缩.不保存文件 String dcxh = String.format("%03d", keyValue); String folderFileName ...

  4. C#执行zip文件压缩的几种方法及我遇到的坑总结

    工作项目中需要用到zip压缩解压缩文件,一开始看上了Ionic.Zip.dll这个类库,操作方便,写法简单 对应有个ziphelper类 using Ionic.Zip; public static ...

  5. zip文件压缩(转)

    zip文件结构            上面中的每一行都是一个条目,zip文件就是由一个或者多个条目组成.      条目在Java中对应ZipEntry类         创建zip压缩文件     ...

  6. 使用commons-compress操作zip文件(压缩和解压缩)

    http://www.cnblogs.com/luxh/archive/2012/06/28/2568758.html Apache Commons Compress是一个压缩.解压缩文件的类库. 可 ...

  7. python zip文件压缩和解压

    压缩 import shutil zipOutputName = "1234" # 输出1234.zip fileType = "zip" # 文件类型zip ...

  8. ZIP文件压缩和解压

    最近要做一个文件交互,上传和下载, 都是zip压缩文件,所以研究了下,写了如下的示例 注意引用  ICSharpCode.SharpZipLib.dll 文件 该dll文件可以到官方网站去下载, 我这 ...

  9. zip文件压缩

    zip文件结构            上面中的每一行都是一个条目,zip文件就是由一个或者多个条目组成.      条目在Java中对应ZipEntry类       创建zip压缩文件      知 ...

  10. 利用Java进行zip文件压缩与解压缩

    摘自: https://www.cnblogs.com/alphajuns/p/12442315.html 工具类: package com.alphajuns.util; import java.i ...

随机推荐

  1. KingbaseES 查看函数中最耗时的sql

    测试 创建测试环境所需表及函数 create table test1(id int); INSERT INTO test1(id) VALUES (generate_series(1, 10000)) ...

  2. linux xfce 设置限制亮度滑块的最小亮度,在屏幕里的xfce设置亮度的最小亮度。

    参照 https://docs.xfce.org/xfce/xfce4-power-manager/preferences 使用代码 xfconf-query -c xfce4-power-manag ...

  3. #Multi-SG#HDU 3032 Nim or not Nim?

    题目 有\(n\)堆石子,每次可以从一堆中取出若干个或是将一堆分成两堆非空的石子, 取完最后一颗石子获胜,问先手是否必胜 分析 它的后继还包含了分成两堆非空石子的SG函数,找规律可以发现 \[SG[x ...

  4. 小师妹学JavaIO之:文件编码和字符集Unicode

    目录 简介 使用Properties读取文件 乱码初现 字符集和文件编码 解决Properties中的乱码 真.终极解决办法 总结 简介 小师妹一时兴起,使用了一项从来都没用过的新技能,没想却出现了一 ...

  5. Qt For OpenHarmony

     本文转载自 OpenHarmony TSC 官方微信公众号<峰会回顾第29期 | Qt For OpenHarmony > 演讲嘉宾 | 蔡万苍 回顾整理 | 廖   涛 排版校对 |  ...

  6. 如何通过OpenHarmony系统中集成的ffmpeg库和NAPI机制,实现更多的多媒体功能?

    简介 OpenAtom OpenHarmony(以下简称"OpenHarmony")作为"开源"世界的"连接器",不断为智能社会的发展提供源 ...

  7. openstack-train-ovs-ceph 部署

    第一章 Openstack简介 https://baike.baidu.com/item/OpenStack/342467?fr=aladdin Openstack框架图![img](file:/// ...

  8. C++读取配置文件ini

    一.设置 ini 保存位置 // 保存到 appdata 中 LPCWSTR GetIniPath() { WCHAR buffer[MAX_PATH]; BOOL result = SHGetSpe ...

  9. 手把手教你使用ArkTS中的canvas实现签名板功能

      一.屏幕旋转 ● 实现签名板的第一个功能就是旋转屏幕.旋转屏幕在各种框架中都有不一样的方式,比如:在H5端,我们一般是使用CSS中的transform属性中的rotate()方法来强制将网页横屏, ...

  10. 鸿蒙开发套件之DevEco Profiler助您轻松分析应用性能问题

     作者:shizhengtao,华为性能调优工具专家 应用的性能优化一直以来都是开发者所面临的一大难题,在2023HDC大会上全新亮相的HarmonyOS NEXT开发者预览版,其中鸿蒙开发套件Dev ...