深入解析HTML5中的Blob对象的使用


Posted in HTML / CSS onSeptember 08, 2015

HTML5中的Blob对象和MYSQL中的BLOB类型在概念上是有点区别的。MYSQL中的BLOB类型就只是个二进制数据容器。而HTML5中的Blob对象除了存放二进制数据外还可以设置这个数据的MINE类型,这相当于对文件的储存,其它很多二进制对象也是从这个对象继承的。

在稍低版本的现代浏览器中,这个Blob对象还没规范化,因此需要BlobBuilder之类的方式来创建。但是现在Blob已经规范到可以直接new它的构造器Blob来创建了,而且浏览器几乎都已经支持了这个方式,所以对于旧标准咱就没必要纠结了。

CSS Code复制内容到剪贴板
  1. var data='<b style="font-size:32px;color:red;">次碳酸钴</b>';   
  2. var blob=new Blob([data],{"type":"text/html"});   
  3. console.log(blob);  

深入解析HTML5中的Blob对象的使用

这样我们就创建了一个Blob对象,注意Blob这个构造器的参数比较诡异,第一个参数是一组数据,所以必须是数组,即使像上面的例子一样只有一个字符串也必须用数组装起来。第二个参数是对这一Blob对象的配置属性,目前也只有一个type也就是相关的MIME需要设置,使用key-value的方式也许是为了今后的扩展。

那么,把数据做成Blob有什么用呢?对于Blob对象,我们可以创建出一个URL来访问它。使用URL对象的createObjectURL方法。

CSS Code复制内容到剪贴板
  1. var data='<b style="font-size:32px;color:red;">次碳酸钴</b>';   
  2. var blob=new Blob([data],{"type":"text/html"});   
  3. onload=function(){   
  4.   var iframe=document.createElement("iframe");   
  5.   iframe.src=URL.createObjectURL(blob);   
  6.   document.body.appendChild(iframe);   
  7. };  

深入解析HTML5中的Blob对象的使用

 不仅是上面例子中的text/html,任何浏览器支持的类型都可以这么用。而且这个Blob-URL的生存周期是从创建到文档释放,不会造成资源的浪费。

Blob是一个HTML5中很基本的二进制数据对象,很多方法的操作参数都支持使用Blob,这个我一下也列举不出。总之,几乎所有参数类型是二进制数据的方法都支持使用Blob作为参数就对了。所以把数据做成Blob可以让之后的一些列操作变得更方便。

方法

slice()

返回一个新的Blob对象,包含了源Blob对象中指定范围内的数据.

CSS Code复制内容到剪贴板
  1. Blob slice(   
  2.   optional long long start,   
  3.   optional long long end,   
  4.   optional DOMString contentType   
  5. };  

参数
start 可选
开始索引,可以为负数,语法类似于数组的slice方法.默认值为0.
end 可选
结束索引,可以为负数,语法类似于数组的slice方法.默认值为最后一个索引.
contentType 可选
新的Blob对象的MIME类型,这个值将会成为新的Blob对象的type属性的值,默认为一个空字符串.
返回值
一个新的Blob对象,包含了源Blob对象中指定范围内的数据.
注意
如果start参数的值比源Blob对象的size属性的值还大,则返回的Blob对象的size值为0,也就是不包含任何数据.

BlobPropertyBag

一个包含有两个属性type和endings的对象.
type
设置该Blob对象的type属性.
endings(已废弃)
对应于BlobBuilder.append()方法的endings参数.该参数的值可以是"transparent"或者"native".
Blob构造函数用法举例

下面的代码:

CSS Code复制内容到剪贴板
  1. var aFileParts = ["<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>"];   
  2. var oMyBlob = new Blob(aFileParts, { "type" : "text\/xml" }); // the blob  

 
等价于:

CSS Code复制内容到剪贴板
  1. var oBuilder = new BlobBuilder();   
  2. var aFileParts = ["<a id=\"a\"><b id=\"b\">hey!<\/b><\/a>"];   
  3. oBuilder.append(aFileParts[0]);   
  4. var oMyBlob = oBuilder.getBlob("text\/xml"); // the blob  

 
BlobBuilder接口提供了另外一种创建Blob对象的方式,但该方式现在已经废弃,所以不应该再使用了.

例子:使用类型数组和Blob对象创建一个对象URL

CSS Code复制内容到剪贴板
  1. var typedArray = GetTheTypedArraySomehow();   
  2. var blob = new Blob([typedArray], {type: "application/octet-binary"}); // 传入一个合适的MIME类型   
  3. var url = URL.createObjectURL(blob);   
  4. // 会产生一个类似blob:d3958f5c-0777-0845-9dcf-2cb28783acaf这样的URL字符串   
  5. // 你可以像使用一个普通URL那样使用它,比如用在img.src上.  
HTML / CSS 相关文章推荐
css3实现背景图片拉伸效果像桌面壁纸一样
Aug 19 HTML / CSS
css3+jq创作含苞待放的荷花
Feb 20 HTML / CSS
CSS3中媒体查询结合rem布局适配手机屏幕
Jun 10 HTML / CSS
使用HTML5 Canvas API中的clip()方法裁剪区域图像
Mar 25 HTML / CSS
HTML5 LocalStorage 本地存储详细概括(多图)
Aug 18 HTML / CSS
html5 Canvas实现图片旋转的示例
Jan 15 HTML / CSS
HTML5实现自带进度条和滑块滑杆效果
Apr 17 HTML / CSS
做一个能自适应高度的textarea的示例代码
Sep 06 HTML / CSS
html5实现输入框fixed定位在屏幕最底部兼容性
Jul 03 HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
Sep 10 HTML / CSS
开发微信小程序之WXSS样式教程
Apr 18 HTML / CSS
浅谈为什么我的 z-index 又不生效了
Jul 15 HTML / CSS
深入解析HTML5使用SVG图像时的viewBox属性用法
Sep 02 #HTML / CSS
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
Aug 31 #HTML / CSS
详解HTML5中的元素与元素
Aug 17 #HTML / CSS
详解HTML5中download属性的应用
Aug 06 #HTML / CSS
详解HTML5中div和section以及article的区别
Jul 14 #HTML / CSS
一些常用的HTML5模式(pattern) 总结
Jul 14 #HTML / CSS
针对HTML5的Web Worker使用攻略
Jul 12 #HTML / CSS
You might like
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
PHP模板解析类实例
2015/07/09 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
js实现上传图片之上传前预览图片
2013/03/25 Javascript
js跳转页面方法实现汇总
2014/02/11 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
JSON简介以及用法汇总
2016/02/21 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
React + webpack 环境配置的方法步骤
2017/09/07 Javascript
解决vue-cli + webpack 新建项目出错的问题
2018/03/20 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
vue 更改连接后台的api示例
2019/11/11 Javascript
JS实现页面数据懒加载
2020/02/13 Javascript
Python转码问题的解决方法
2008/10/07 Python
Python实现字符串与数组相互转换功能示例
2017/09/22 Python
Python排序搜索基本算法之选择排序实例分析
2017/12/09 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
县优秀教师事迹材料
2014/01/31 职场文书
综治宣传月活动总结
2014/04/28 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
查摆问题整改措施
2014/10/24 职场文书
房产公证书格式
2015/01/26 职场文书
奖励通知
2015/04/22 职场文书
出生证明范本
2015/06/15 职场文书
教你使用一行Python代码玩遍童年的小游戏
2021/08/23 Python