首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js new blob 源码

Blob 对象在 JavaScript 中用于表示不可变的原始数据。Blob 表示的数据不一定是一个JavaScript原生格式。这是一个可以存储二进制数据的类文件对象。

基础概念

Blob 构造函数接受两个参数:

  1. array:一个由ArrayBuffer, ArrayBufferView, Blob, DOMString 等对象构成的数组,这些对象会被连接成一个新的Blob对象。
  2. options(可选):一个配置对象,可以指定如下两个属性:
    • type:默认值为"",表示新创建的 Blob 对象的 MIME 类型。
    • lastModified:默认值为0,表示 Blob 对象最后修改日期的时间戳。

相关优势

  • 二进制数据处理Blob 对象允许开发者直接操作二进制数据,这对于处理图像、音频、视频等多媒体文件非常有用。
  • 文件操作模拟Blob 可以模拟文件操作,比如创建、读取和写入文件,这在离线应用或者Web Worker中特别有用。
  • 与URL API集成Blob 对象可以与 URL.createObjectURL() 方法结合使用,生成一个指向该 Blob 的 URL,方便在网页上直接显示或下载。

类型

Blob 对象本身没有子类型,但是可以通过 type 属性来指定其 MIME 类型。

应用场景

  • 文件上传:用户可以选择文件后,可以使用 FileReader 读取为 Blob 对象,然后上传到服务器。
  • 数据存储:可以将复杂的数据结构转换为 Blob,然后存储在 IndexedDB 或者 localStorage 中。
  • 动态内容生成:比如生成 PDF 文件或者图片,可以直接创建 Blob 对象然后提供给用户下载。

示例代码

下面是一个使用 new Blob 的简单示例:

代码语言:txt
复制
// 创建一个包含字符串数据的 Blob 对象
const blob = new Blob(["Hello, world!"], { type: "text/plain" });

// 创建一个指向该 Blob 的 URL
const url = URL.createObjectURL(blob);

// 创建一个 a 标签用于下载 Blob 数据
const a = document.createElement("a");
a.href = url;
a.download = "hello.txt";
document.body.appendChild(a);
a.click();

// 清理创建的 URL 对象
URL.revokeObjectURL(url);

遇到的问题及解决方法

问题:创建 Blob 对象时出现内存不足的错误。

原因:尝试创建的 Blob 对象太大,超出了浏览器允许的内存限制。

解决方法

  1. 分块处理数据:将大数据分割成小块,分别创建 Blob 对象,然后使用 Blob.prototype.slice 方法将它们连接起来。
  2. 使用流式处理:对于非常大的文件,可以使用 ReadableStream 来逐步读取和处理数据。
代码语言:txt
复制
// 分块处理数据的示例
function createLargeBlob(data, chunkSize) {
  const chunks = [];
  for (let i = 0; i < data.length; i += chunkSize) {
    chunks.push(data.slice(i, i + chunkSize));
  }
  return new Blob(chunks);
}

const largeData = new Array(1024 * 1024 * 10).fill('a'); // 假设这是一个非常大的数组
const largeBlob = createLargeBlob(largeData, 1024 * 1024); // 每次处理1MB的数据块

以上就是关于 new Blob 的基础概念、优势、类型、应用场景以及可能遇到的问题和解决方法的详细解释。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

caffe源码分析-Blob

本文主要分析caffe源码分析-Blob,主要如下几个方面: overview整体上了解caffe的Blob Blob 成员变量 Blob主要函数,核心在于Blob的使用实例以及其与...(capacity_ * sizeof(Dtype))); } } 上面注意的是:shape_data_是历史版本的shape, new SyncedMemory(shape.size()...主要内容: caffe源码分析-SyncedMemory caffe源码分析-Blob 其中Blob分析给出了其直接与opencv的图片相互转化以及操作,可以使得我们更好的理解Blob. 3. caffe...内容如下: caffe源码分析-layer caffe源码分析-ReLULayer caffe源码分析-inner_product_layer caffe源码分析-layer_factory 首先分析了最简单的...数据输入层,主要是多线程+BlockingQueue的方式读取数据训练: 内容如下: caffe源码分析-BlockingQueue caffe源码分析-InternalThread caffe源码分析

2.1K40
  • 搞清楚 js new

    new 构造函数里的this以及返回值 /** * new 构造函数里面的this * 默认函数里面的this,谁调用就指向谁, * 但是new 构造函数,这个构造函数里面的this指向是new...,则返回值为new 构造函数出来的实例 * 2,如果返回的是一个非基本数据类型的对象(object),则返回值为指定的对象 * 如果new 构造函数里面没有返回值,默认返回undefined,则返回值还是...('test2') console.log(test2); //{age: 18} 没有new得到的是什么 /** * 首先我们看没有new的时候,得到的是什么 * 根据控制台打印,可知没有new...new得到的是什么--------'); var dog = { name: 'husky' } console.log(dog); new做了什么 /** * new做了什么?...(Cat, 'tom1') console.log(cat1); 简化版实现new /** * new做了什么?

    2.4K20

    js new Date() 默认是8点

    然后我通过new Date()传入日期字符串创建了一个对象,并与当前时间做时间戳比较,结果12点刚过,就出问题了。...举个栗子 // 假设当前时间是2019年12月22日0点20分 new Date('2019-12-22').getTime() new Date().getTime() // 上面的结果是什么?...当时临时解决问题后的字符串大概长这样: new Date('2019/12/22 00:00:00').getTime() new Date().getTime() 临时解决问题。...那么为什么js会对不同分割的时间字符串进行不同处理呢?貌似是因为-分隔且具有前导0的日期字符串,会被解析成ISO格式的字符串,以GMT时区为基准,不过我也没看懂。...@param dateStr * 时间字符串 */ function getDate(dateStr){ /* 若日期是使用-分割的,全部转换成/ 因为只有日期时,js

    8.9K30

    模拟实现 new 操作符(js)

    js 不是基于 class 这种静态类模式,而是基于原型对象的模式。 所以,在 js 中,new 操作符,其实可以通俗的理解成一个辅助工具,用来辅助函数构造出一个新对象。...得先明确这点,才能知道,的确是可以模拟 new 操作符的。...new 操作符其实就是做了几件事: 创建一个继承自 A.prototype 的空对象 让空对象作为函数 A 的上下文,并调用 A 返回这个空对象 这是基本的 new 使用的场景,那么我们要来模拟实现的话...套用 MDN 对 new 的说明: new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。...没错,从引擎角度来看,的确是这样处理,但这些内部属性我们并没有办法看到的啊,那对于我们这些写 js 的来说,如何判断一个函数是否能够作为构造函数呢?靠经验积累?

    3.6K10

    JS面向对象二:this原型链new原理

    JS面向对象二:this/原型链/new原理 阮一峰JavaScript教程:面向对象编程 阮一峰JavaScript教程:实例对象与 new 命令 阮一峰JavaScript教程:this 关键字 也可以看看这篇文章周大侠啊...源码看不到,那就看文档. 看文档!: onclick: ? addEventListener: ? jQuery中: ?...this是call()的第一个参数,只有写onclick,写addEventListener和写jQuery中on的人想call()哪个东西,就把这个this绑定到哪里去了,所以要确定this,就要看源码或者文档...但是由于回调函数的调用者往往不是我们自己,而是回调函数的接收者,即某个库或框架、甚至是JS运行时环境。...- 方应杭的文章 - 知 周大侠啊 进击的 JavaScript 之 (七) 原型链 周大侠啊 进击的 JavaScript (八) 之 继承 new() 看看这篇文章很清楚: JS 的 new 到底是干什么的

    2K30
    领券