2. blob

1
<video src="blob:http://www.bilibili.com/d0823f0f-2b2a-4fd6-a93a-e4c82173c107"></video>
  • a.什么是blob?

Blob 对象表示一个不可变、原始数据的类文件对象。Blob 表示的不一定是JavaScript原生格式的数据。 文件(即File)接口基于Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。

要从其他非blob对象和数据构造一个Blob,请使用 Blob() 构造函数。要创建包含另一个blob数据的子集blob,请使用 slice()方法。要获取用户文件系统上的文件对应的Blob对象,

File 对象是特殊类型的 Blob,且可以用在任意的 Blob 类型的 context 中。比如说, FileReader, URL.createObjectURL(), createImageBitmap(), 及 XMLHttpRequest.send() 都能处理 Blob 和 File。

官方:接受Blob对象的API也被列在 File 文档中(下边有file相关内容的部分,继续浏览)。

MDN-Blob

Blob属性:

Blob.size 只读
Blob 对象中所包含数据的大小(单位为字节)。
Blob.type 只读
一个字符串,表明该Blob对象所包含数据的MIME类型。如果类型无法确定,则返回空字符串。
语法:`var mimetype = instanceOfFile.type`
  • b.如何创建Blob

    BlobBuilder 接口提供了另外一种创建Blob对象的方式:使用旧方法创建 Blob 对象。链接地址
    解释:使用 BlobBuilder 来创建一个Blob 实例,并且使用一个 append() 方法,将字符串(或者 ArrayBuffer 或者 Blob,此处用 string 举例)插入,一旦数据插入成功,就可以使用 getBlob() 方法设置一个 mime 。但该方式现在已经废弃,不应继续使用:

    1
    2
    3
    4
    var builder = new BlobBuilder();
    var fileParts = ['<a id="a"><b id="b">hey!</b></a>'];
    builder.append(fileParts[0]);
    var myBlob = builder.getBlob('text/xml');

Blob构造函数

Blob() 构造函数返回一个新的 Blob 对象。 blob的内容由参数数组中给出的值的串联组成。

Blob() 构造函数 允许用其它对象创建 Blob 对象。比如,用字符串构建一个 blob:

语法: var aBlob = new Blob( array, options );

参数:

  • array 是一个由ArrayBuffer, ArrayBufferView(TypedArray类型化数组的构造函数), Blob, DOMString 等对象构成的 Array,或者其他类似对象的混合体,它将会被放进Blob。DOMStrings会被编码为UTF-8。

    • ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区。ArrayBuffer 不能直接操作,而是要通过类型数组对象或 DataView 对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区的内容。

      • ArrayBuffer 构造函数用来创建一个指定字节长度的 ArrayBuffer 对象。

        • 以现有数据获取 ArrayBuffer

          1
          2
          3
          4
          5
          6
          function b64EncodeUnicode(str) {
          return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
          return String.fromCharCode('0x' + p1);
          }));
          }
          b64EncodeUnicode('✓ à la mode'); // "4pyTIMOgIGxhIG1vZGU="
        • FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。
          其中File对象可以是来自用户在一个 <input> 元素上选择文件后返回的FileList对象,也可以来自拖放操作生成的 DataTransfer对象,还可以是来自在一个HTMLCanvasElement上执行mozGetAsFile()方法后返回结果。

  • options 是一个可选的BlobPropertyBag字典,它可能会指定如下两个属性:

    type,默认值为 "",它代表了将会被放入到blob中的数组内容的MIME类型。
    endings,默认值为"transparent",用于指定包含行结束符\n的字符串如何被写入。 它是以下两个值中的一个: "native",代表行结束符会被更改为适合宿主操作系统文件系统的换行符,或者 "transparent",代表会保持blob中保存的结束符不变
1
2
3
4
5
var aFileParts = ['<a id="a"><b id="b">hey!</b></a>']; // 一个包含DOMString的数组
var oMyBlob = new Blob(aFileParts, {type : 'text/html'}); // 得到 blob var debug = {hello: "world"};
var blob = new Blob([JSON.stringify(debug, null, 2)], {type: 'application/json'});

File

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

File 对象是特殊类型的 Blob,且可以用在任意的 Blob 类型的 context 中。比如说, FileReader, URL.createObjectURL(), createImageBitmap(), 及 XMLHttpRequest.send() 都能处理 Blob 和 File。

  • URL.createObjectURL() 
    使用 Blob 创建一个指向类型化数组的URL
1
2
3
4
var blob = new Blob([typedArray], {type: "application/octet-binary"});// 传入一个合适的MIME类型
var url = URL.createObjectURL(blob);
// 会产生一个类似blob:d3958f5c-0777-0845-9dcf-2cb28783acaf 这样的URL字符串
// 你可以像使用一个普通URL那样使用它,比如用在img.src上。(MSE)

从 Blob 中提取数据

从Blob中读取内容的唯一方法是使用 FileReader。以下代码将 Blob 的内容作为类型数组读取:

1
2
3
4
5
6
7
var reader = new FileReader();
// onabort、onerror、onload、onloadstart、onloadend、onprogress
reader.addEventListener("loadend", function() {
// reader.result 包含转化为类型数组的blob
// 文件的内容。该属性仅在读取操作完成后才有效,数据的格式取决于使用哪个方法来启动读取操作。
});
reader.readAsArrayBuffer(blob);

简单说下 FileReader:
属性:

  • FileReader.error 只读
    一个DOMException,表示在读取文件时发生的错误 。
  • FileReader.readyState 只读
    表示FileReader状态的数字。取值如下:
常量名 描述
EMPTY 0 还没有加载任何数据
LOADING 1 数据正在被加载
DONE 2 已完成全部的读取请求
  • FileReader.result 只读
    文件的内容。该属性仅在读取操作完成后才有效,数据的格式取决于使用哪个方法来启动读取操作。
    方法:

    FileReader.abort()

    中止读取操作。在返回时,readyState属性为DONE。

    FileReader.readAsArrayBuffer()

    开始读取指定的 Blob中的内容, 一旦完成, result 属性中保存的将是被读取文件的 ArrayBuffer 数据对象.

    FileReader.readAsBinaryString()

    开始读取指定的Blob中的内容。一旦完成,result属性中将包含所读取文件的原始二进制数据。

    FileReader.readAsDataURL()

    开始读取指定的Blob中的内容。一旦完成,result属性中将包含一个data: URL格式的字符串以表示所读取文件的内容。

    FileReader.readAsText()

    开始读取指定的Blob中的内容。一旦完成,result属性中将包含一个字符串以表示所读取的文件内容。

参考文献:

http://blog.csdn.net/oscar999/article/details/36373183/

[转] Meida视频加密二-Blob对象的更多相关文章

  1. Java 使用blob对H5视频播放进行加密《java视频加密》

    1.创建一个H5 <video>标签 <video id="sound" type="video/mp4" controls="co ...

  2. [HTML5] Blob对象

    写在前面 本篇主要总结Blob对象属性及作用,通过DEMO介绍Blob对象的应用场景. Blob对象 一直以来,JS都没有比较好的可以直接处理二进制的方法.而Blob的存在,允许我们可以通过JS直接操 ...

  3. JavaScript把项目本地的图片或者图片的绝对路径转为base64字符串、blob对象在上传

    主题: JavaScript把项目本地的图片或者图片的绝对路径转为base64字符串.blob对象在上传. 用处: 从本地选择图片上传,如项目规定只能选择本项目文件夹下的图像上传为头像等. 主要思想: ...

  4. 【前端知乎系列】ArrayBuffer 和 Blob 对象

    本文首发在 个人博客 更多丰富的前端学习资料,可以查看我的 Github: <Leo-JavaScript>,内容涵盖数据结构与算法.HTTP.Hybrid.面试题.React.Angul ...

  5. 文件转base64处理或转换blob对象链接

    一.文件转base64,代码: axios({ method: 'get', url: apiPath.common.downloaddUrl, responseType: 'blob'}).then ...

  6. 前端H5中JS用FileReader对象读取blob对象二进制数据,文件传输

    HTML5中的Blob对象只是二进制数据的容器,本身并不能操作二进制,故本篇将对其操作对象FileReader进行介绍. FileReader FileReader主要用于将文件内容读入内存,通过一系 ...

  7. [转] Blob对象

    Blob是计算机界通用术语之一,全称写作:BLOB(binary large object),表示二进制大对象.MySql/Oracle数据库中,就有一种Blob类型,专门存放二进制数据.在javas ...

  8. MP4视频流base64数据转成Blob对象

    网上一大堆对图片base64转Blob.File的方法 很少有视频mp4转的,可能是因为原理相同的原因吧!但在项目中针对视频流base64转Blob对象时,花了好长时间才成功,特专门记录一下! APP ...

  9. uniapp中拿到base64转blob对象,或base64转bytes字节数组,io操作写入字节流文件bytes

    1. uniAPP中拿到附件的base64如何操作,如word文件 /*** 实现思路:* 通过native.js的io操作创建文件,拿到平台绝对路径* 再通过原生类进行base64解码,拿到字节流b ...

随机推荐

  1. ping 丢包或不通时链路测试说明【转】

    转自:https://help.aliyun.com/knowledge_detail/40573.html?spm=5176.2020520165.121.d157.4fe170291Qdp4l#W ...

  2. MySQL索引调优【转】

    一.关于查询计划 其实,关于所有的关系型数据库中,在运行T-SQL语句的时候,在查询器进行编译运行的同时,都会有着自己的内部的一个优化过程,而这优化之后的产物就是:执行计划. 在SQL SERVER中 ...

  3. Python3学习笔记03-基础数据类型

    Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对 ...

  4. C++、VC++、MFC网页自动注册、登陆、发帖、留言,QQ注册、QQ申请器源码、注册邮箱源码、自动发帖源码

    C++.VC++.MFC网页自动注册.登陆.发帖.留言,QQ注册.QQ申请器源码.注册邮箱源码.自动发帖源码   参考资料: 自动登录yahoo邮箱http://blog.csdn.net/suisu ...

  5. svn服务器镜像备份

    server master  192.168.0.100-->源版本库 server slave     192.168.0.101-->镜像版本库 1.初始化svnsync init s ...

  6. sonar——Synchronized classes Vector, Hashtable, Stack and StringBuffer should not be used

    It is better to use their new unsynchronized replacements: ArrayList or LinkedList instead of Vector ...

  7. List集合三种遍历方法

    List<String> list = new ArrayList<String>();list.add("aaa");list.add("bbb ...

  8. MySQL NULL处理

    -- 首先在用户表中插入数据如下 TRUNCATE TABLE UserInfo ; INSERT  INTO `userinfo`(`ID`,`UserName`,`UserLogin`,`User ...

  9. 连接mysql(建表和删表)

    from sqlalchemy.ext.declarative import declarative_base##拿到父类from sqlalchemy import Column##拿到字段from ...

  10. 一个简单的Loading控件

    实现效果如下: 使用方法: 在layout文件中添加以下代码: <com.example.jack.ui.widget.RingLoading android:layout_width=&quo ...