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

uniapp+vue3实现小程序和h5解压线上压缩包以及如何访问解压后的视频地址

安装jszip插件

npm install jszip

对应功能实现和逻辑处理:

<script setup>import { onMounted, reactive, ref } from 'vue'import { onHide, onUnload } from '@dcloudio/uni-app'import JSZip from 'jszip'let videoSrc = ref('') // 视频地址// 创建JSZip实例const zip = new JSZip()// #ifdef MP-WEIXINlet fsm = reactive(null)// 创建临时文件路径const tempFilePath = `${uni.env.USER_DATA_PATH}/video.mp4`// #endifonMounted(() => {unzipOnlineFile(线上压缩地址)})onHide(() => {// 在适当的时候,比如组件销毁时,执行以下代码// #ifdef WEBURL.revokeObjectURL(videoSrc.value)// #endif// #ifdef MP-WEIXINfsm.removeSavedFile(tempFilePath)// #endif})onUnload(() => {// #ifdef WEBURL.revokeObjectURL(videoSrc.value)// #endif// #ifdef MP-WEIXINfsm.removeSavedFile(tempFilePath)// #endif})/*** 解压线上压缩包* @param zipUrl {String} 解压地址*/async function unzipOnlineFile (zipUrl) {// #ifdef WEB// 从URL加载.zip文件let response = await fetch(zipUrl)let arrayBuffer = await response.arrayBuffer()// 加载ArrayBuffer到JSZip实例await zip.loadAsync(arrayBuffer)// 获取压缩包中的文件列表fileList = Object.keys(zip.files)// 解压缩处理,解压第一个文件let fileContent = await zip.files[fileList[0]].async('string')// todo 进行页面对应的赋值   console.log(fileContent, '解压第一个文件的内容')// 解压缩处理,解压第二个文件(视频文件)zip.file(fileList[1]).async('blob').then(blob => {// 创建一个临时的URL指向Blob对象 设置video的src属性为临时的URL,可以进行视频的播放等操作videoSrc.value = URL.createObjectURL(blob)})// #endif// #ifdef MP-WEIXINuni.request({url: zipUrl,method: 'GET',responseType: 'arraybuffer', // 小程序中获取二进制数据需要指定arraybuffersuccess: res => {let data = res.data// 使用JSZip处理获取到的资源zip.loadAsync(data).then(contents => {// 处理解压后的内容fileList = Object.keys(contents.files)// 解压缩处理,解压第一个文件return zip.files[fileList[0]].async('string')}).then(fileContent => {// todo 进行页面对应的赋值   console.log(fileContent, '解压第一个文件的内容')}).then(() => {// 解压缩处理,解压第二个文件(视频文件)let videoFile = zip.files[fileList[1]] // 获取视频文件// 如果知道文件名,可以直接通过名字获取// const videoFile = zip.file('video.mp4');// 将视频文件内容转换为ArrayBuffer return videoFile.async('arraybuffer')}).then(videoBuffer => {fsm = uni.getFileSystemManager()// 写入临时文件return fsm.writeFile({filePath: tempFilePath,data: videoBuffer,encoding: 'binary'})}).then(()=> {// 设置video的src属性为临时的di,可以进行视频的播放等操作videoSrc.value = tempFilePath})},fail: error => {// 处理错误console.log(error, '解压错误')}})// #endif}
</script>

http://www.lryc.cn/news/432135.html

相关文章:

  • 探索 Zed 编辑器:速度与协作的巅峰之作
  • 文心快码前端工程师观点分享:人机协同新模式的探索之路(三)
  • Qt基础类03-直线类QLine
  • 集成电路学习:什么是ARM先进精简指令集计算机
  • 设计模式-行为型模式-迭代器模式
  • FRP代理(QUIC通信)实验
  • 项目依赖拉不下来卡着不动怎么办,node又不支持cnpm
  • ansible--role
  • SpinalHDL之数据类型(一)
  • Ansys Zemax | 什么是Sobol取样?
  • Unity 热更 之 【YooAsset 热更】Unity 可以进行热更的资源管理系统,并 【Android 端简单实现·案例热更】
  • vue3写一个无限树形菜单,递归组件
  • 3D建模主要使用哪些软件?有什么特点?
  • Android Studio 加载多个FLutter项目
  • SealSuite 一站式 IT 管理与办公安全解决方案,助力出海企业夯实数字化底座
  • l超市售货管理系统小程序的设计
  • systemverilog、verilog的部分常用内部函数
  • Python趣味绘图案例
  • P3588 [POI2015] PUS
  • 指针(四)
  • 0902,DEQUE,LIST,VECTOR
  • LeetCode 每日一题 2024/9/2-2024/9/8
  • Linux中的Vim文本编辑器
  • rancher搭建k8s及jenkins自动化部署
  • vue el-dialog嵌套解决无法点击问题
  • c# c++程序 交互
  • 解决ruoyi框架中使用pagehelper插件分页查询后对数据进行对象转换后失效问题
  • RabbitMQ 应用
  • 使用Python读取Excel数据的详细指南
  • VitePress 动态路由与路径加载器详解