vue实现文件解压缩

news2024/11/17 11:24:57

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.coloradmin.cn/o/2168255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基础算法(4)——前缀和

1. 前缀和 题目描述&#xff1a; 解法一&#xff1a;暴力解法 直接模拟实现题目流程即可 时间复杂度为&#xff0c;根据题目给出的条件&#xff0c;肯定会超时 解法二&#xff1a;前缀和&#xff08;适用题型&#xff1a;快速 求出数组中某一个 连续区间 的 和&#xff09;…

什么录屏软件最好?这四款软件留着有用!

在这个数字化时代&#xff0c;无论是教学分享、游戏直播还是产品演示&#xff0c;高质量的录屏软件都成为了我们不可或缺的工具。面对市面上琳琅满目的选择&#xff0c;到底哪款录屏软件才能真正满足你的需求&#xff0c;成为你创作路上的得力助手呢&#xff1f;别急&#xff0…

如何调用Ascend C算子

Ascend C是CANN针对算子开发场景推出的编程语言&#xff0c;原生支持C和C标准规范&#xff0c;兼具开发效率和运行性能。基于Ascend C编写的算子程序&#xff0c;通过编译器编译和运行时调度&#xff0c;运行在昇腾AI处理器上。使用Ascend C&#xff0c;开发者可以基于昇腾AI硬…

【ADC】ΔΣ ADC 中数字滤波器的延迟以及 SAR ADC 与 ΔΣ ADC 的差异对比总结

本文学习于TI 高精度实验室课程&#xff0c;深入探讨 delta-sigma 转换器中使用的数字滤波器。具体来说&#xff0c;本文将重点介绍数字滤波器如何引入延迟&#xff0c;因为这是 SAR 和 delta-sigma ADC 之间的显著差异。 文章目录 一、低延迟数字滤波器二、高延迟数字滤波器三…

MSVCR100.dll丢失怎么办,教你6种解决MSVCR100.dll丢失的方法

在计算机的日常使用中&#xff0c;我们可能会遇到各种各样的问题&#xff0c;其中之一就是MSVCR100.dll文件丢失。这个文件是Microsoft Visual C 2010的一个组件&#xff0c;如果丢失&#xff0c;可能会导致某些程序无法正常运行。那么&#xff0c;如何解决这个问题呢&#xff…

拉取指定版本的代码

// 获取指定版本的分支 https://git.swf.daimler.com/mbient/meta-mbient/-/blob/release/E066.1-2024.07.31-457-4870220-4882586/meta-mbient/recipes-mbient/dialog-domain-handlers/dialog-domain-handlers_git.bb?ref_typetags meta-mbient meta-mbient recipes-mbient …

大数据新视界 --大数据大厂之 Spark Streaming 实时数据处理框架:案例与实践

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

如何通过10个简单步骤,让AI创作效率翻倍,性能提升90%

本文背景 随着不断深入地使用 AI 以及体验更多产品 最近对于大模型的使用感悟又有了一些新收获。 今天&#xff0c;特意来和大家分享 10 个大模型的使用妙招 。 这既是分享&#xff0c;也是我自己的学习梳理。 下面介绍的这些技巧&#xff0c;适用于所有大模型应用&#xff08;…

9月26日

1.虚函数与纯虚函数&#xff1a; 在类中定义函数时&#xff0c;在函数前加关键字 virtual &#xff0c;允许在派生类中重写的方法。那么该函数就是虚函数。 纯虚函数&#xff1a;没有实现的方法&#xff0c;用于定义接口。 2.基类为什么需要虚析构函数&#xff1a; 确保删除派生…

使用 Higress AI 插件对接通义千问大语言模型

前言 什么是 AI Gateway AI Gateway 的定义是 AI Native 的 API Gateway&#xff0c;是基于 API Gateway 的能⼒来满⾜ AI Native 的需求。例如&#xff1a; 将传统的 QPS 限流扩展到 token 限流。将传统的负载均衡/重试/fallback 能力延伸&#xff0c;支持对接多个大模型厂…

深入浅出 AbstractQueuedSynchronizer (AQS)

文章目录 什么是 AQSAQS 的工作原理同步状态&#xff08;state&#xff09;等待队列 AQS 是如何让线程排队并唤醒的公平锁和非公平锁AQS 的应用场景ReentrantLock&#xff08;可重入锁&#xff09;AQS 在 ReentrantLock 中的工作原理典型应用场景 CountDownLatch&#xff08;倒…

基于Django技术开发的酒店信息管理系统,包括员工用户功能和管理员用户功能两部分

项目摘要 该项目是基于Django技术开发的一套酒店管理系统&#xff0c;系统应用浏览器/服务期&#xff08;Browser/Server&#xff09;架构。系统主要包括员工用户功能和管理员用户功能两部分。开发员工信息管理、顾客信息管理、会员信息管理、停车场信息管理、餐厅信息管理、客…

HTML5+CSS3小实例:立方体控件的登录表单

实例:立方体控件的登录表单 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial…

【算法篇】二叉树类(1)(笔记)

目录 一、认识二叉树 1. 二叉树的种类 &#xff08;1&#xff09;满二叉树 &#xff08;2&#xff09;完全二叉树 &#xff08;3&#xff09;二叉搜索树 &#xff08;4&#xff09;平衡二叉搜索树 2. 二叉树的存储方式 3. 二叉树的遍历方式 4. 二叉树的定义 二、Leet…

(done) 使用泰勒展开证明欧拉公式

问问神奇的 GPT&#xff0c;how to prove euler formula? 一个答案如下&#xff1a;

华硕NUC亮相工博会,解锁工业AI PC解决方案

2024年9月24日至28日&#xff0c;中国国际工业博览会于上海国家会展中心盛大举行&#xff0c;华硕智能物联网展台位于展馆6.1H E183展位&#xff0c;在展位上华硕向大众展示了智能AI、物联网设备、华硕NUC等解决方案及IoT硬件产品&#xff0c;吸引了众多专业观众驻足交流和体验…

线程池的执行流程和配置参数总结

一、线程池的执行流程总结 提交线程任务&#xff1b;如果线程池中存在空闲线程&#xff0c;则分配一个空闲线程给任务&#xff0c;执行线程任务&#xff1b;线程池中不存在空闲线程&#xff0c;则线程池会判断当前线程数是否超过核心线程数&#xff08;corePoolSize&#xff09…

EfficientViT(2023CVPR):具有级联组注意力的内存高效视觉Transformer!

EfficientViT: Memory Efficient Vision Transformer with Cascaded Group Attention EfficientViT: 具有级联组注意力的内存高效视觉Transformer 万文长字&#xff0c;请耐心观看~ 论文地址&#xff1a; https://arxiv.org/abs/2305.07027 代码地址&#xff1a; Cream/Effici…

计算机毕业设计 饮食营养管理信息系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch9 策略梯度方法 -9.3.1

之前看了 2 次视频&#xff0c;公式有点多&#xff0c; 还是没整理出来。 这个版本是以下步骤后的版本 基本把相关的核心论文过了一遍&#xff0c;代码整理了部分 PDF 资料 整理 v3 链接 视频 链接 习题 策略梯度方法需要估计值 函数近似&#xff1a; 状态/动作 价值、策略 参…