使用【Blob、Base64】两种方式显示【文本、图片、视频】 使用 video 组件播放视频

news2025/3/1 13:51:55

Blob 显示

Blob 对象的类型是由 MIME 类型(Multipurpose Internet Mail Extensions)来确定的。MIME 类型是一种标准,用于表示文档、图像、音频、视频等多媒体文件的类型。以下是一些常见的 Blob 对象类型:

  • text/plain:纯文本文件。
  • text/html:HTML文件。
  • text/xml:XML文件。
  • image/png:PNG格式的图像文件。
  • image/jpeg:JPEG格式的图像文件。
  • image/gif:GIF格式的图像文件。
  • audio/mpeg:MP3格式的音频文件。
  • video/mp4:MP4格式的视频文件。

文本显示

Blob(Binary Large Object)对象表示一个不可变的、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。

new Blob([text], {type: 'text/plain'}) 来创建一个包含字符串"测试 blog 文字显示文本信息"的 Blob 对象。这个Blob对象的MIME类型是 “text/plain” ,表示它包含纯文本数据。

显示文字,使用 blob.text() 将其转化为文本格式

<script setup>
import {ref} from 'vue';
import axios from 'axios';

let text = '测试 blog 文字显示文本信息';
let blob = new Blob([text], {type: 'text/plain'});
let blobText = ref('');

blob.text().then(res => {
  console.log('text', res);
  blobText.value = res;
});
</script>

<template>
  <main>
    <div>{{ blobText }}</div>
  </main>
</template>

文本显示

image-20231011171349538

图片显示

要预览 Blob 对象中的图片,可以使用 JavaScript 中的 URL.createObjectURL() 方法。这个方法将 Blob 对象转换为一个 URL,然后可以将这个 URL 赋值给 img 元素的 src 属性

在发送请求是要注明参数 responseType: 'blob'

<script setup>
import {ref} from 'vue';
import axios from 'axios';

let imgSrc = ref('');
axios.get('/api/minio/download', {params: {'fileName': '1.jpg'},responseType: 'blob'}).then(res => {
  // 二进制文件
  let fileBinaryData = res.data;
  const blob = new Blob([fileBinaryData], {type: 'image/jpg'});
  const url = window.URL.createObjectURL(blob);
  console.log('url', url); // 输出 url blob:http://127.0.0.1:5173/7328a00c-57e0-46c6-b508-29c5a5ce0c7f
  imgSrc.value = url;

});

</script>

<template>
  <main>
    <div>{{ blobText }}</div>
    <a-image
        :width="200"
        :src="imgSrc"
    />
  </main>
</template>

图片显示出来了

image-20231011171216986

Base64 显示

Base64 是一种将二进制数据转换成可打印字符的编码方式。Base64 的底层原理是将 3 个字节的二进制数据转换为 4 个字节的打印字符,每个可打印字符对应 6 个二进制位

简单讲就是,把乱码不可读的二进制转为可读字符

二进制流显示

image-20231011194942347

Blob 转 Base64

如果要二进制转 Base64,就先把二进制流转成 Blob,再转成 Base64

// blob 转 base64
const blob2Base64 = (blob) => {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(blob);
    reader.onload = () => resolve(reader.result);
    reader.onerror = (error) => reject(error);
  });
};

base64 结果显示

image-20231011194859883

Base64 显示图片

使用 base64 赋值给图片的 src 也可以显示出来

image-20231011195306481

播放视频

原生播放

http://localhost:7100//api/minio/download?fileName=demo-mp4.mp4 为视频请求地址

<video width="1120" height="540" controls="controls" id="video" preload="auto"     >
  <source src="http://localhost:7100//api/minio/download?fileName=demo-mp4.mp4"   type="video/mp4">
</video>

image-20231011190322748

使用组件播放

使用 vue3-video-play 播放,功能会比较多

npm 安装

npm i vue3-video-play --save

局部使用

import 'vue3-video-play/dist/style.css'
import { videoPlay } from 'vue-video-play'

全局使用

import { createApp } from 'vue'
import App from './App.vue'
let app = createApp(App)
 
import vue3videoPlay from 'vue3-video-play' 
import 'vue3-video-play/dist/style.css'
app.use(vue3videoPlay)
 
app.mount('#app')

方案一(直接请求视频路径)

srcposter 都是直接请求的路径

<vue3VideoPlay
    width="800px"
    title="钢铁侠"
    src="http://localhost:7100//api/minio/download?fileName=demo-mp4.mp4"
    poster="http://localhost:7100//api/minio/download?fileName=1.jpg"
    @play="onPlay"
    @pause="onPause"
    @timeupdate="onTimeupdate" />

方案二(转成 Base64 播放)

将二进制流转成 Blob 后再转 Base64,再赋值给 srcposter ,实现播放

<vue3VideoPlay
    width="800px"
    title="钢铁侠"
    :src="videoSrc"
    :poster="imgSrc"
    @play="onPlay"
    @pause="onPause"
    @timeupdate="onTimeupdate" />

blob2Base64 方法实现在上面,这是 vue3 的代码,可使用其他框架实现,思路一致

let videoSrc = ref('');
axios.get('/api/minio/download', {params: {'fileName': 'demo-mp4.mp4'}, responseType: 'blob'}).then(res => {
  // 二进制文件
  let fileBinaryData = res.data;
  const blob = new Blob([fileBinaryData], {type: 'video/mp4'});
  blob2Base64(blob).then(res => {
    videoSrc.value = res;
  });

image-20231011192642496

更多属性配置请查看文档

vue3-video-play 文档:Vue3VideoPlay (codelife.cc)

其他

文中使用到 MinIO 存放图片,以及使用 SpringBoot 访问图片,给前端提供了 api 接口

想要了解分布式对象存储 MinIO,可以阅读一下博客内容,希望对你有帮助

Linux 部署 MinIO 分布式对象存储 & 配置为 typora 图床

SpringBoot 对接 MinIO 实现文件上传下载删除

了解更多 Linux 知识,docker 安装,服务部署,可以查看专栏

Linux 专栏 - 凉了的凉茶

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1086994.html

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

相关文章

华为数通方向HCIP-DataCom H12-831题库(单选题:241-260)

第241题 某园区部署了IPV6进行业务测试,该网络中有4台路由器(R1R2、R3和R),运行OSPFV3实现Pv6网络的互联互通。有一台新的路由器R5需要接入网络进行测试,某工程师通过在R4的OSPFV3进程中引入直连路由,实现园区网内的设备能够访问R5的GEO/0/1口地址。关千该场景的描述,错误…

RabbitMq启用TLS

Windows环境 查看配置文件的位置 选择使用的节点 查看当前节点配置文件的配置 配置TLS 将证书放到同配置相同目录中 编辑配置文件添加TLS相关配置 [{ssl, [{versions, [tlsv1.2]}]},{rabbit, [{ssl_listeners, [5671]},{ssl_options, [{cacertfile,"C:/Users/17126…

TensorFlow学习:在web前端如何使用Keras 模型

前言 在上篇文章 TensorFlow学习&#xff1a;使用官方模型进行图像分类、使用自己的数据对模型进行微调中我们学习了如何使用官方模型&#xff0c;以及使用自己的数据微调模型。 但是吧&#xff0c;代码一直是跑在Python里&#xff0c;而我本身是做前端开发的。我是很想让它在…

京东历史价格数据接口,京东商品历史价格接口,京东API接口

京东商品历史价格数据接口采集方法如下&#xff1a; 注册京东开发者账号&#xff0c;并创建应用&#xff0c;获取到应用ID&#xff08;appID&#xff09;、应用密钥&#xff08;appSecret&#xff09;以及访问令牌&#xff08;accessToken&#xff09;。获取接口请求地址。根据…

让 Visual Studio 用上 ChatGPT

一、简介 Visual chatGPT Studio 是 Visual Studio 的一个免费扩展&#xff0c;它直接在 IDE 中添加了 chatGPT 功能。它允许用户以可以根据菜单功能的方式使用 chatGPT。 二、功能介绍 该扩展提供了一组使用 ChatGPT 命令&#xff0c;可以在编辑器中选择你需要处理的代码或…

Python数据挖掘:入门、进阶与实用案例分析——自动售货机销售数据分析与应用

文章目录 摘要01 案例背景02 分析目标03 分析过程04 数据预处理1. 清洗数据1.1 合并订单表并处理缺失值1.2 增加“市”属性1.3 处理订单表中的“商品详情”属性1.4 处理“总金额&#xff08;元&#xff09;”属性 2.属性选择3.属性规约 05 销售数据可视化分析1.销售额和自动售货…

视频批量剪辑与分割:这些技巧帮你提高生成m3u8文件的效率

在数字媒体时代&#xff0c;m3u8文件已经成为了一种常见的流媒体格式&#xff0c;广泛应用于网络视频播放。这种文件由一系列音视频片段组成&#xff0c;对于提供高质量的视频体验至关重要。本文将介绍如何通过云炫AI智剪将视频批量剪辑与分割技巧来提高生成m3u8文件的效率&…

计算机网络第四层 运输层

一&#xff0c;运输层引入的目的 1&#xff0c;网络通信主体标识 网络通信的本质是运行的主机上的进程之间的通信 同一个主机上有多个进程在工作&#xff0c;进程如何加以区分标识&#xff08;PID&#xff09;---本地主机 网络上的主机需要一个统一的进程标识分配机制 逻辑…

基于单目相机的2D测量(工件尺寸和物体尺寸)

目录 1.简介 2.基于单目相机的2D测量 2.1 想法&#xff1a; 2.2 代码思路 2.2 主函数部分 1.简介 基于单目相机的2D测量技术在许多领域中具有重要的背景和意义。 工业制造&#xff1a;在工业制造过程中&#xff0c;精确测量是确保产品质量和一致性的关键。基于单目相机的2…

uniapp编译到小程序Component is not found in path “components/energy/illumination“

Component is not found in path "components/energy/illumination" 直接清除缓存重新编译

如何保护我们的网络安全

保护网络安全是至关重要的&#xff0c;尤其是在今天的数字化时代。以下是一些保护网络安全的基本步骤&#xff1a; 1、使用强密码&#xff1a;使用包含字母、数字和特殊字符的复杂密码。不要在多个网站上重复使用相同的密码。定期更改密码。 2、启用双因素认证 (2FA)&#xff…

JavaScript反爬虫技巧详细攻略

在互联网时代&#xff0c;网站采取了各种手段来防止被爬虫抓取数据&#xff0c;其中最常见的就是JavaScript反爬虫技巧。本文将揭示一些常用的JavaScript反爬虫技巧&#xff0c;并提供一些实际操作建议&#xff0c;帮助您保护自己的爬虫免受检测和封禁。 1、为什么网站使用Java…

CentOS 搭建 OpenVPN 服务

CentOS 搭建 OpenVPN 服务 概述OpenVPN 应用场景OpenVPN 主机准备OpenVPN 服务端搭建部署安装配置证书软件创建证书安装openvpn并写入服务端配置文件启动并检查端口 OpenVPN客户端配置&#xff08;linux端&#xff09;配置openvpn测试连接 OpenVPN客户端搭建部署&#xff08;wi…

AMD Zen5、Zen6架构细节首次曝光:原生32核心!直奔2nm工艺

AMD将在明年推出Zen5架构的锐龙8000系列、霄龙9005/8005系列&#xff0c;更下一代的Zen6架构也已经崭露头角&#xff0c;据说可以支持到史无前例的16通道内存。 现在&#xff0c;MLID曝光了一份AMD架构路线图&#xff0c;列出了Zen5、Zen6的不少细节&#xff0c;尤其是…

Element Plus阻止 el-dropdown、el-switch等冒泡事件

最近做vue3项目&#xff0c;使用Element Plus,又遇到坑了&#xff01; 问题点&#xff1a;组件中遇到事件冒泡问题了&#xff0c;el-checkbox 中 change事件要求阻止冒泡&#xff0c;如下代码中要求点击checkbox时不调用li标签的show方法 <li click"show()">…

UE4和C++ 开发-C++与UMG的交互2(C++获取UMG的属性)

1、...C获取UMG的属性 1.1、第一种方法&#xff1a;通过名称获取控件。 void UMyUserWidget::NativeConstruct() {Super::NativeConstruct();//通过名字&#xff0c;获取蓝图控件中的按钮引用。CtnClic Cast<UButton>(GetWidgetFromName(TEXT("Button_44"))…

什么是实验室超声波乳化?超声波乳化的工作原理?

乳液是什么&#xff1f;它是两种或多种不相混合的液体的共同体。那么&#xff0c;这些互不相容的液体是如何混合在一起的呢&#xff1f;这就要归功于超声波的神奇力量。超声波乳化棒&#xff0c;就像一个无形的魔法师&#xff0c;将高强度的超声波能量耦合到液体中&#xff0c;…

【API篇】一、执行环境API

文章目录 0、认识1、创建执行环境2、执行模式3、触发程序执行4、关于executeAsync方法 0、认识 DataStream API是Flink的核心层API。一个Flink程序&#xff0c;其实就是对数据源DataStream的各种转换。具体来说&#xff0c;代码基本上都由以下几部分构成&#xff1a; 后面章节…

早安心语|不委屈不将就,让生活充满仪式感

1、让自己的生活多一种可能&#xff0c;给自己的未来多一份惊喜&#xff0c;人生所有的机会和惊喜&#xff0c;都是在你全力以赴的道路上遇到的。 2、推开自己喜欢的人叫成长&#xff0c;留住自己喜欢的人叫本事&#xff0c;总有人嫌你不够好&#xff0c;也有人觉得你哪都好&am…

【RKNN】YOLO V5中pytorch2onnx,pytorch和onnx模型输出不一致,精度降低

在yolo v5训练的模型&#xff0c;转onnx&#xff0c;再转rknn后&#xff0c;测试发现&#xff1a; rknn模型&#xff0c;量化与非量化&#xff0c;相较于pytorch模型&#xff0c;测试精度都有降低onnx模型&#xff0c;相较于pytorch模型&#xff0c;测试精度也有降低&#xff…