深入解析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美化表单控件全集
Jun 29 HTML / CSS
css3 border-image使用说明
Jun 23 HTML / CSS
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
Apr 16 HTML / CSS
详解CSS3的box-shadow属性制作边框阴影效果的方法
May 10 HTML / CSS
详解CSS3阴影 box-shadow的使用和技巧总结
Dec 03 HTML / CSS
HTML5 Canvas的性能提高技巧经验分享
Jul 02 HTML / CSS
用html5的canvas画布绘制贝塞尔曲线完整代码
Aug 14 HTML / CSS
HTML5 Canvas实现烟花绽放特效
Mar 02 HTML / CSS
Canvas图片分割效果的实现
Jul 29 HTML / CSS
原生 JS+CSS+HTML 实现时序图的方法
Jul 31 HTML / CSS
HTML5中外部浏览器唤起微信分享功能的代码
Sep 15 HTML / CSS
HTML5之高度塌陷问题的解决
Jun 01 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
Terran魔法科技
2020/03/14 星际争霸
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
$_GET['goods_id']+0 的使用详解
2013/06/06 PHP
探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
2013/06/24 PHP
php解决和避免form表单重复提交的几种方法
2016/08/31 PHP
用JavaScript显示随机图像或引用
2009/04/21 Javascript
javascript中的对象创建 实例附注释
2011/02/08 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
jQuery中parent()方法用法实例
2015/01/07 Javascript
jQuery循环动画与获取组件尺寸的方法
2015/02/02 Javascript
css如何让浮动元素水平居中
2015/08/07 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
基于jQuery实现的打字机效果
2017/01/16 Javascript
Vue 中使用 CSS Modules优雅方法
2018/04/09 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
使用python实现省市三级菜单效果
2016/01/20 Python
python开发之str.format()用法实例分析
2016/02/22 Python
python开发之list操作实例分析
2016/02/22 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
Python 私有化操作实例分析
2019/11/21 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
物流专业求职计划书
2014/01/10 职场文书
青年文明号事迹材料
2014/01/18 职场文书
汽车促销活动方案
2014/03/31 职场文书
企业法人授权委托书
2014/09/25 职场文书
基层组织建设年活动总结
2015/05/09 职场文书
php TP5框架生成二维码链接
2021/04/01 PHP
MySQL 如何分析查询性能
2021/05/12 MySQL
python基础之类属性和实例属性
2021/10/24 Python