深入解析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支持IE6, 7, and 8的边框border属性
Dec 28 HTML / CSS
纯CSS3实现自定义Tooltip边框涂鸦风格的教程
Nov 05 HTML / CSS
一款纯css3实现的鼠标经过按钮特效教程
Nov 09 HTML / CSS
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
Nov 11 HTML / CSS
一款纯css3实现的鼠标悬停动画按钮
Dec 29 HTML / CSS
网页切图的CSS和布局经验与要点
Apr 09 HTML / CSS
CSS3绘制不规则图形的一些方法示例
Nov 07 HTML / CSS
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
Dec 30 HTML / CSS
利用html5 canvas破解简单验证码及getImageData接口应用
Jan 25 HTML / CSS
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
Apr 08 HTML / CSS
举例详解HTML5中使用JSON格式提交表单
Jun 16 HTML / CSS
详解Html5 监听拦截Android返回键方法
Apr 18 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
PHP 程序员的调试技术小结
2009/11/15 PHP
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
深入PHP中慎用双等于(==)的详解
2013/06/06 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
2013/06/24 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
php实现多城市切换特效
2015/08/09 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
Bootstrap 3 按钮标签实例代码
2017/02/21 Javascript
React Native 截屏组件的示例代码
2017/12/06 Javascript
微信小程序实现下载进度条的方法
2017/12/08 Javascript
微信小程序 云开发模糊查询实现解析
2019/09/02 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python实现带百分比的进度条
2016/06/28 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
2016/06/30 Python
python 表格打印代码实例解析
2019/10/12 Python
Python hmac模块使用实例解析
2019/12/24 Python
Python实现疫情地图可视化
2021/02/05 Python
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
遇到的Mysql的面试题
2014/06/29 面试题
Java程序员常见面试题
2015/07/16 面试题
银行职员思想汇报
2013/12/31 职场文书
给幼儿园老师的表扬信
2014/01/19 职场文书
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫
Golang日志包的使用
2022/04/20 Golang