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

前端blob数据

Blob介绍

定义

Blob 对象表示一个不可变原始数据类文件对象。它的数据可以按文本二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。 通常可以用于声音、视频等多媒体文件的存储;

构造

new Blob(blobParts, options);

blobParts:数组类型,可以存放任意个ArrayBufferArrayBufferViewBlobDOMString(会编码为utf-8);
options:可选,可以设置blob的typeendings

  • type:blob中数组元素的MIME类型,默认为'';
  • endings:包含行字符串\n的字符串如何被写入。默认值_transparent_保留不变,_native_会改为对应宿主操作系统文件系统的换行符。

DOMString 是一个UTF-16字符串。由于JavaScript已经使用了这样的字符串,所以DOMString直接映射到 一个String。

在这里插入图片描述

属性

type:返回blob的MIME类型
size:blob的数据大小(字节)

方法

返回一个新的 Blob 对象,包含了源 Blob 对象中指定范围内的数据。
Blob.slice([start[, end[, contentType]]])

// 返回一个能读取blob内容的 ReadableStream。
Blob.stream();

// 返回一个promise且包含blob所有内容的UTF-8格式的 USVString。
Blob.text()

// 返回一个promise且包含blob所有内容的二进制格式的 ArrayBuffer 
Blob.arrayBuffer()

从Blob总提取数据

可以使用FileReader对象

const reader = new FileReader();
reader.addEventListener('loaded', function() {
	// reader.reasult 包含被转换为typedArray的Blob
});

reader.readAsArrayBuffer(blob);

可以使用Response对象

const text = await (new Response(blob)).text()

在这里插入图片描述

File对象

定义

通常情况下, File 对象是来自用户在一个 <input> 元素上选择文件后返回的 FileList 对象,也可以是来自由拖放操作生成的 DataTransfer 对象,或者来自 HTMLCanvasElement 上的 mozGetAsFile() API

属性

name:文件名
size:文件大小
lastModified:文件最后修改时间对应时间戳
type:MIME类型
webkitRelativePath:返回file相关的path和URL

方法

slice:继承了Blob的slice方法

demo

<input>元素

    <input type="file" id="fileUploader" multiple accept="image">
        <script>
        const el = document.getElementById('fileUploader');
        el.onchange = (e) => {
            const files = e.target.files;
            console.log({ files }, files[0])
        }
    </script>
<div id="fileUploader"
	ondrop="drop(e)"
	ondragover="allowDrop(e)"
></div>
<script>
	function drop(e) {
		e.preventDefault();
		const files = e.dataTransfer.files;
		console.log({ files });
		console.log(files instanceof FileList);
	}
	
	function allowDrop(e) {
		e.preventDefault();
	}

	
</script>

在这里插入图片描述

数据缓冲区

定义

数据缓冲区指的是内存中操作二进制数据的一片连续的存储区,相对于数组可以有效提高数据读取效率;

在这里插入图片描述

Buffer

BufferNode提供的对象,可以通过Buffer创建存储二进制数据的缓冲区用于整合前端媒体文件数据 等;

一个Buffer类似于一个整数数组,但它对应于V8堆内存之外的一块原始内存

ArrayBuffer

表示一段固定长度的连续的用于存储二进制数据的缓存区;对于高密度访问的数据(音视频数据等)读取效率更高,因为数据会提前写入到内存中;
在这里插入图片描述
在这里插入图片描述

属性——byteLength,表示ArrayBuffer的大小
方法——slice(start, end),返回一个新的ArrayBuffer

ArrayBufferView

ArrayBuffer未提供任何直接读写内存的方法,而ArrayBufferView是建立在ArrayBuffer上的视图,提供了处理二进制数据的基本单元,可以读取ArrayBuffer的内容;

TypedArraysDataView是ArrayBufferView的实例

参考文献

  1. Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。
  2. 「多图预警」那些年,被blob虐过的程序猿觉醒了!

相关文章:

  • Jenkins+ant+mysql 自动化构建脚本文件输出日志
  • Unity 渲染YUV数据 ---- 以Unity渲染Android Camera数据为例子
  • 高德骨子里还是个「理工男」
  • Vue指令学习 | 零基础入门
  • promise执行顺序面试题令我头秃,你能作对几道
  • 基于springboot的图书管理系统设计与实现
  • const char *p,char const *p和char *const p区别
  • disruptor (史上最全之1):伪共享原理性能对比实战
  • 网络安全防御体系建设-防守实例
  • 基于Java+SpringBoot+Thymeleaf+Mysql在线外卖点餐系统设计与实现
  • 手把手带你免费申请《软件著作权》 超详细计算机软件著作权申请教程 文末送模板
  • Mysql中级篇
  • 小学生python游戏编程2----飞机大战1
  • 用python实现自动回复QQ消息——不到60行
  • 第十三届蓝桥杯C++B组国赛E题——出差 (AC)
  • 11111111
  • Centos6.8 使用rpm安装mysql5.7
  • chrome扩展demo1-小时钟
  • Debian下无root权限使用Python访问Oracle
  • Fastjson的基本使用方法大全
  • gf框架之分页模块(五) - 自定义分页
  • IP路由与转发
  • java8-模拟hadoop
  • JavaScript实现分页效果
  • JDK9: 集成 Jshell 和 Maven 项目.
  • leetcode98. Validate Binary Search Tree
  • Nacos系列:Nacos的Java SDK使用
  • Promise面试题,控制异步流程
  • Ruby 2.x 源代码分析:扩展 概述
  • 阿里云Kubernetes容器服务上体验Knative
  • 从PHP迁移至Golang - 基础篇
  • 大数据与云计算学习:数据分析(二)
  • 深入浏览器事件循环的本质
  • 数组的操作
  • Java数据解析之JSON
  • RDS-Mysql 物理备份恢复到本地数据库上
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • %check_box% in rails :coditions={:has_many , :through}
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (十五)使用Nexus创建Maven私服
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (一)认识微服务
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .net 提取注释生成API文档 帮助文档
  • .NetCore部署微服务(二)
  • .NET面试题(二)
  • @Autowired标签与 @Resource标签 的区别