【uniapp】获取上传视频的md5,适用于APP和H5

embedded/2025/1/31 18:57:38/

代码实现

APP端使用 uni.getFileInfo() 即可
H5环境需要安装spark-md5

npm install spark-md5

封装的获取上传视频的md5方法

import SparkMD5 from 'spark-md5'/*** 用于获取视频的md5* @param {Object} e 要上传的文件* @param {Object} digestAlgorithm 取值	md5、sha1*/
export function getFileInfo(e, digestAlgorithm = 'md5') {return new Promise((resolve, reject) => {// #ifdef APPuni.getFileInfo({filePath: e.tempFilePath,digestAlgorithm,success(res) {resolve(res)},fail(err) {console.log(`获取文件信息失败,返回空对象`)resolve({size: '',digest: null})}})// #endif// #ifdef H5try {let fileReader = new FileReader()let Spark = new SparkMD5.ArrayBuffer()fileReader.readAsArrayBuffer(e.tempFile)fileReader.onload = function (res) {Spark.append(res.target.result)let md5 = Spark.end()resolve({size: '',digest: md5})}} catch (error) {console.log('🚀 ~ 获取视频的md5 ~ error:', error)resolve({size: '',digest: null})}// #endif})
}

上传视频方法

/*** 选取视频* @param {Object} event 选取的视频本地信息,包含路径等信息*/
async afterReadVideo(e) {if (JSON.stringify(e) === '{}' || !e) {return}let self = thislet videoDuration = e.durationlet sizeMb = Number(e.size) / 1024 / 1024if (sizeMb > 1536) {return uni.showToast({title: '视频过大,不得超过1.5G',icon: 'none',duration: 1500})}// 视频是否截图完的flagself.uploadImgFinished = falseself.uploadLoading = truelet videoUrl = ''try {// 上传视频videoUrl = await uploadFile(e.tempFilePath, self.processingProgress)self.currVideoUrl = videoUrlself.videoImgUrl = videoUrl + '!/snapshot/point/00:00:00/format/png'// 获取视频的md5let fileInfo = await getFileInfo(e)self.videoMd5 = fileInfo.digestself.uploadLoading = false// 视频是否截图完的flagself.uploadImgFinished = truethis.videoDuration = videoDuration} catch (err) {// 上传失败this.videoDuration = 0let msg = '上传失败,请稍后重试'if (self.uploadLoading) {msg = '上传已取消'}self.uploadLoading = falseself.downloadTask = nulluni.showToast({title: msg,icon: 'none'})}
}

http://www.ppmy.cn/embedded/158429.html

相关文章

针对业务系统的开发,如何做需求分析和设计?

个人认为第一步最重要的还是定义问题的边界范围,所有的问题讨论都要回归到边界里面 前台架构设计流程 小中台架构的设计流程 中台本质是2B类产品,我们以数据相关小中台举例的2B类产品和技术的几个思考(后面有详细的案例): 中台本质与2B类产品的技术思考 中台本质上是面…

DeepSeek-R1 模型及GRPO算法学习

总结DeepSeek-R1 模型算法,并对其中的GRPO算法做一些学习补充。 DeepSeek-R1 论文总结 提出了通过强化学习提升大语言模型推理能力的方法,开发出 DeepSeek-R1-Zero 和 DeepSeek-R1 模型,在多个推理任务上表现出色,并开源模型推动…

IDEA构建JavaWeb项目,并通过Tomcat成功运行

目录 一、Tomcat简介 二、Tomcat安装步骤 1.选择分支下载 2.点击下载zip安装包 3.解压到没有中文、空格和特殊字符的目录下 4.双击bin目录下的startup.bat脚本启动Tomcat 5.浏览器访问Tomcat 6.关闭Tomcat服务器 三、Tomcat目录介绍 四、WEB项目的标准结构 五、WEB…

单片机串口打印printf函数显示内容(固件库开发)

1.hal_usart.c 文件 #include <stdio.h> #include "hal_usart.h" #include "stm32F10x.h"//**要根据 使用的是哪个串口 对应修改 串口号 eg&#xff1a;USART1** void USART_PUTC(char ch) {/* 等待数据寄存器为空 */while((USART1->SR & …

sys中目录和文件的建立以及与驱动的交互

sys目录是利用Linux的sysfs特殊文件系统创建的&#xff0c;用于在用户态展示设备信息等内核数据。在sys中建立目录和文件涉及以下内容&#xff1a; sysfs文件系统初始化 sysfs文件系统通过 sysfs_init 函数完成注册和初始化&#xff0c;其主要操作包括&#xff1a; 使用 kme…

Spark Streaming的背压机制的原理与实现代码及分析

Spark Streaming的背压机制是一种根据JobScheduler反馈的作业执行信息来动态调整Receiver数据接收率的机制。 在Spark 1.5.0及以上版本中&#xff0c;可以通过设置spark.streaming.backpressure.enabled为true来启用背压机制。当启用背压机制时&#xff0c;Spark Streaming会自…

Visual Studio使用GitHub Copilot提高.NET开发工作效率

GitHub Copilot介绍 GitHub Copilot 是一款 AI 编码助手&#xff0c;可帮助你更快、更省力地编写代码&#xff0c;从而将更多精力集中在问题解决和协作上。 GitHub Copilot Free包含哪些功能&#xff1f; 每月 2000 代码补全&#xff0c;帮助开发者快速完成代码编写。 每月 …

第 10 课 Python 内置函数 (增补)

1.enumerate enumerate() 接受一个可迭代对象作为输入&#xff0c;并返回一个枚举对象这个枚举对象包含了原始可迭代对象中的每个元素以及对应的索引它允许在循环中同时获取索引和值&#xff0c;这对于需要索引的情况非常方便 作用&#xff1a;在循环中需要同时访问索引和值时非…