JavaScript Blob

ops/2024/10/19 4:22:18/

JavaScript Blob

Blob(Binary Large Object)对象是JavaScript中的一个用于表示不可变的、原始数据的类。Blob 表示的数据不一定是JavaScript原生的,它可以是图片、音频、视频、文件等二进制数据。Blob 对象提供了一种处理这种二进制数据的方式,而不需要将其转换为字符串,这样可以减少数据转换时的性能损耗和可能的数据损坏问题。

1. 创建Blog

纯文本

new Blob(['hello world'], {type: 'text/plain'})

JSON

new Blob([JSON.stringify({name: 'yimt', age: 123})], {type: 'application/json'})

字节数组

const uint8Array = new Uint8Array(3);
for (let i = 0; i < uint8Array.length; i++) {uint8Array[i] = 0x61 + i
}
const blob = new Blob([uint8Array], {type: 'application/octet-stream'})

2. 读取Blob

使用FileReader类

// 创建测试blob
const blob = new Blob(['hello world'], {type: 'text/plain'})
// 创建FileReader
const reader = new FileReader()
// 监视加载完成事件
reader.onloadend = function (e) {console.log(e.target.result)
}
// 指定读取对象
reader.readAsText(blob)

使用text方法(读取字符串)

const blob = new Blob(['hello world'], {type: 'text/plain'})
console.log(await blob.text())

使用arrayBuffer方法(读取字节)

// 创建Uint8Array
const uint8Array = new Uint8Array(3)
// 初始化数据为abc
for (let i = 0; i < uint8Array.length; i++) {uint8Array[i] = 0x61 + i
}// 创建Blob
const blob = new Blob([uint8Array], {type: 'application/octet-stream'})
// 读取字节
const arrayBuffer = await blob.arrayBuffer()
// 字节转字符串
const decoder = new TextDecoder('UTF-8')
const msg = decoder.decode(arrayBuffer)
console.log(msg) // abc

3. 下载

// 创建测试blob
const blob = new Blob(['hello world'], {type: 'text/plain'})
// 创建一个指向这个Blob的URL
const url = URL.createObjectURL(blob)const a = document.createElement('a')
a.href = url
a.download = 'example.txt'
a.click()// 释放创建的URL对象
URL.revokeObjectURL(url)

4. 参考

  • Blob
  • FileReader
  • TextDecoder

http://www.ppmy.cn/ops/94304.html

相关文章

场外期权如何开仓和平仓?

场外期权交易是在国内已经有九年的时间了&#xff0c;第一个上市的期权品种就是上证50ETF期权&#xff0c;在国内是一直处于平稳发展阶段。场外期权如何开仓和平仓其实很简单&#xff0c;场外期权开仓都是买入开仓&#xff0c;平仓选择卖出平仓或者一键平仓&#xff0c;下文为大…

24/8/8算法笔记 不同分类算法的差异

import numpy as np from sklearn.tree import DecisionTreeClassifier from sklearn.linear_model import LogisticRegression from sklearn.svm import SVCfrom sklearn import datasets 加载数据 我们加载的是啤酒的数据 wine datasets.load_wine() wine LR逻辑斯蒂回归…

Electron 结合 nginx 配置自动更新

在使用 Electron 结合 Nginx 进行自动更新时,主要涉及到几个关键步骤:构建 Electron 应用、配置 Nginx 以托管更新包、以及 Electron 应用内部实现更新逻辑。下面将详细介绍这些步骤。 1. 构建 Electron 应用 首先,确保你的 Electron 应用能够构建出可发布的版本。这通常涉…

实时数据推送:Spring Boot 中两种 SSE 实战方案

在 Web 开发中&#xff0c;实时数据交互变得越来越普遍。无论是股票价格的波动、比赛比分的更新&#xff0c;还是聊天消息的传递&#xff0c;都需要服务器能够及时地将数据推送给客户端。传统的 HTTP 请求-响应模式在处理这类需求时显得力不从心&#xff0c;而服务器推送事件&a…

OceanBase V4.2特性解析:简化分区表重命名功能

1. 背景 OceanBase数据库兼容hash、range、list等多种分区表类型&#xff0c;并支持二级分区&#xff0c;这些特性赋予了OceanBase数据库卓越的可扩展性。分区表的分区名称可由用户根据需求自行设定&#xff0c;或依据相应的命名规则由系统自动化生成。在实际的用户业务场景中…

51单片机-LCD1602显示屏

简介 是一个液晶显示屏&#xff0c;通过电压对显示区域进行控制&#xff0c;有电就显示。 能够同时显示32个字符&#xff0c;分为两行&#xff0c;一行显示16个字符。可以显示的内容只能是字母、数字或者一些特殊符号。 使用ASCII码来让LCD1602来显示对应的字符。 电路图 …

【OpenCV C++20 学习笔记】直方图计算-split, calcHist, normalize

直方图计算-split, calcHist, normalize 广义直方图示例目标分离通道计算直方图绘制计算结果归一化绘制 最终结果 广义直方图 直方图的横坐标除了可以是图片中的强度值&#xff0c;也可以是任何其他我们想要观察的特征。例如&#xff0c;下面的图片矩阵中包含了0-255的强度值&…

Jmeter接口测试+压力测试

接口测试 Jmeter-http接口脚本 一般分五个步骤:&#xff08;1&#xff09;添加线程组 &#xff08;2&#xff09;添加http请求 &#xff08;3&#xff09;在http请求中写入接入url、路径、请求方式和参数 &#xff08;4&#xff09;添加查看结果树 &#xff08;5&#xff09;…