当前位置: 首页 > news >正文

vue实现文件解压缩

1. 使用CompressionStream API实现压缩

这里开启了多线程解压缩

<template><div class="page"><input type="file" placeholder="选择文件" id="file" /><button @click="compress('compress')">压缩</button><button @click="compress('decompress')">解压</button></div>
</template>
<script setup lang="ts">
import { onMounted } from "vue";
let file: File | null = null; //源文件
let file_zip: Blob | null = null; //压缩后的文件
onMounted(() => {document.getElementById("file")?.addEventListener("change", (e: any) => {file = e.target.files[0];console.log("原始文件", file);});
});
let compress = async (type: string) => {const worker = new Worker(new URL("/src/utils/fileWorker.ts", import.meta.url));worker.postMessage({ file: type == "compress" ? file : file_zip, type });worker.onmessage = (e) => {let {data: { file, type },} = e;if (type == "compress") {file_zip = file;console.log("压缩", file);} else {console.log("解压", file);}worker.terminate();};
};
</script>
<style lang="less" scoped></style>

2.线程:

onmessage = async (file: any) => {// 向主线程发送消息let { file: data, type } = file.data;let compressStream;let blob;if (type == "compress") {compressStream = new CompressionStream("gzip");} else {compressStream = new DecompressionStream("gzip");}const readStream = await data?.stream();const compressdReadStream = readStream?.pipeThrough(compressStream);blob = await new Response(compressdReadStream, {headers:type == "compress"? { "Content-Type": "application/gzip" }: { "Content-Type": "text/plain;charset=utf-8" },}).blob();postMessage({ file: blob, type });
};

3.查看压缩效果

4.好吧,压缩效果不明显,这个API没什么用


http://www.mrgr.cn/news/36788.html

相关文章:

  • andon安灯系统让生产异常快速高效解决
  • 智能充电时代:蓝牙模块在BMS系统中的关键角色
  • 1. go 环境
  • 精密单轴纵切自动车床
  • 远程访问软路由
  • Spring Boot 快速入门教程
  • 十三 系统架构设计(考点篇)
  • MySQL 之事务详解
  • 一文掌握python单元测试unittest(二)
  • UniApp基于xe-upload实现文件上传组件
  • Vue中input框自动聚焦
  • 餐厅包厢预订小程序
  • 第十二章RAS extension support
  • FineReport多数据源报表
  • 聊一聊软件测试的基本原则有哪些
  • 自闭症摘帽学校评价:家长共同推崇的信赖之选
  • Jenkins的安装
  • 王霞培优100分(全套)
  • 点击IDEA中的maven插件中的生命周期的命令发现没有效果,没有任何反应,解决办法在下面
  • C++ 基于 Epoll 的多客户端聊天室项目