js中关于Blob对象的介绍与使用_javascript技巧

来源:脚本之家  责任编辑:小易  

你好,我就是某某介绍的某某,验证通过后不一定是爱你先开口,肯定是他先开口你答就可以了www.zgxue.com防采集请勿采集本网。

blob对象介绍

服务对象可以包括以下的人员: 老师 学生 白领 公务员等等 一句话来概括就是:需要吃饭的人,又能够消费的人群。饭店(或酒店,旅馆),是一个主要为游客提供短期住宿的地方,酒店通常在提供住宿

一个 Blob对象表示一个不可变的, 原始数据的类似文件对象。Blob表示的数据不一定是一个JavaScript原生格式 blob对象本质上是js中的一个对象,里面可以储存大量的二进制编码格式的数据。

案列一: 希望以上介绍,能让您对我的项目有一个概括性的要依目标,即看计划书的对象而有所不同,譬如是要写给投资者看呢,还是要拿去银行贷款。从不同的目的来写,计划书的重点也会有所不同。

创建blob对象

众里寻他千百度,蓦然回首,那人却在,灯火阑珊处 红豆生南国,春来发几枝。愿君多采颉,此物最相思。王维〈相思〉 花开堪折直须折,莫待无花空折枝!唐 杜秋娘〈金缕衣〉 一枝秾艳露凝香,云雨巫山枉断肠。

创建blob对象本质上和创建一个其他对象的方式是一样的,都是使用Blob() 的构造函数来进行创建。 构造函数接受两个参数:

你可以简单自我介绍一下自己,说是某某朋友介绍的,了解下对象的状况,喜好

第一个参数为一个数据序列,可以是任意格式的值。

其实第一次见面的时间,尽可能谈彼此的工作,比如你可以自我介绍一下在哪里工作,主要做些什么工作,这一般是男人先说,一来MM可以了解你到底是干什么的,二来MM也可以通过这个观察你的谈吐有TF说,我的

第二个参数是一个包含两个属性的对象{ type: MIME的类型, endings: 决定第一个参数的数据格式,可以取值为 "transparent" 或者 "native"(transparent的话不变,是默认值,native 的话按操作系统转换) 。 }

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

var debug = {hello: "world"};var blob = new Blob([JSON.stringify(debug, null, 2)], {type : 'application/json'});

既然是对象,那么blob也拥有自己的属性以及方法

属性

Blob.isClosed (只读)

布尔值,指示 Blob.close() 是否在该对象上调用过。 关闭的 blob 对象不可读。 Blob.size (只读)

Blob 对象中所包含数据的大小(字节)。 Blob.type (只读)

一个字符串,表明该Blob对象所包含数据的MIME类型。如果类型未知,则该值为空字符串。

方法

Blob.close()

关闭 Blob 对象,以便能释放底层资源。 Blob.slice([start[, end[, contentType]]])

返回一个新的 Blob 对象,包含了源 Blob 对象中指定范围内的数据。其实就是对这个blob中的数据进行切割,我们在对文件进行分片上传的时候需要使用到这个方法。

看到上面这些方法和属性,使用过HTML5提供的File接口的应该都很熟悉,这些属性和方法在File接口中也都有。 其实File接口就是基于Blob,继承blob功能并将其扩展为支持用户系统上的文件,也就是说:

File接口中的Flie对象就是继承与Blob对象。

blob对象的使用

上面说了很多关于Blob对象的一些概念性的东西,下面我们来看看实际用途。

分片上传

首先说说分片上传,我们在进行文件上传的时候,因为服务器的限制,会限制每一次上传到服务器的文件大小不会很大,这个时候我们就需要把一个需要上传的文件进行切割,然后分别进行上传到服务器。

假如需要做到这一步,我们需要解决两个问题: 怎么切割? 怎么得知当前传输的进度?

首先怎么切割的问题上面已经有过说明,因为File文件对象是继承与Blob对象的,因此File文件对象也拥有slice这个方法,我们可以使用这个方法将任何一个File文件进行切割。

代码如下:

var BYTES_PER_CHUNK = 1024 * 1024; // 每个文件切片大小定为1MB .var blob = document.getElementById("file").files[0];var slices = Math.ceil(blob.size / BYTES_PER_CHUNK);var blobs = [];slices.forEach(function(item, index) { blobs.push(blob.slice(index,index + 1));});

通过上面的方法。我们就得到了一个切割之后的File对象组成的数组blobs;

接下来要做的时候就是讲这些文件分别上传到服务器。

在HTTP1.1以上的协议中,有Transfer-Encoding这个编码协议,用以和服务器通信,来得知当前分片传递的文件进程。

这样解决了这两个问题,我们不仅可以对文件进行分片上传,并且能够得到文件上传的进度。

粘贴图片

blob还有一个应用场景,就是获取剪切板上的数据来进行粘贴的操作。例如通过QQ截图后,需要在网页上进行粘贴操作。

粘贴图片我们需要解决下面几个问题

    监听用户的粘贴操作 获取到剪切板上的数据 将获取到的数据渲染到网页中

首先我们可以通过paste事件来监听用户的粘贴操作:

document.addEventListener('paste', function (e) { console.info(e);});

然后通过事件对象中的clipboardData 对象来获取图片的文件数据。

clipboardData对象介绍

介绍一下 clipboardData 对象,它实际上是一个 DataTransfer 类型的对象, DataTransfer 是拖动产生的一个对象,但实际上粘贴事件也是它。

clipboardData 的属性介绍

属性 类型 说明
dropEffect String 默认是 none
effectAllowed String 默认是 uninitialized
files FileList 粘贴操作为空List
items DataTransferItemList 剪切板中的各项数据
types Array 剪切板中的数据类型 该属性在Safari下比较混乱

items 介绍

items 是一个 DataTransferItemList 对象,自然里面都是 DataTransferItem 类型的数据了。

属性

items 的 DataTransferItem 有两个属性 kind 和 type

属性 说明
kind 一般为 string 或者 file
type 具体的数据类型,例如具体是哪种类型字符串或者哪种类型的文件,即 MIME-Type

方法

方法 参数 说明
getAsFile 如果 kind 是 file ,可以用该方法获取到文件
getAsString function(str) 如果 kind 是 string ,可以用该方法获取到字符串str

在原型上还有一些其他方法,不过在处理剪切板操作的时候一般用不到了。

type 介绍

一般 types 中常见的值有 text/plain 、 text/html 、 Files 。

说明
text/plain 普通字符串
text/html 带有样式的html
Files 文件(例如剪切板中的数据)

有了上面这些方法,我们可以解决第二个问题即获取到剪切板上的数据。

document.addEventListener('paste', function (e) { console.info(e); var cbd = e.clipboardData; for(var i = 0; i < cbd.items.length; i++) { var item = cbd.items[i]; console.info(item); if(item.kind == "file"){ var blob = item.getAsFile(); if (blob.size === 0) { return; } console.info(blob); } }});

最后我们需要将获取到的数据渲染到网页上。

其实这个本质上就是一个类似于上传图片本地浏览的问题。我们可以直接通过HTML5的File接口将获取到的文件上传到服务器然后通过讲服务器返回的url地址来对图片进行渲染。也可以使用fileRender对象来进行图片本地浏览。

fileRender对象简介

从Blob中读取内容的唯一方法是使用 FileReader。

FileReader接口有4个方法,其中3个用来读取文件,另一个用来中断读取。无论读取成功或失败,方法并不会返回读取结果,这一结果存储在result属性中。

方法名 参数 描述
readAsBinaryString file 将文件读取为二进制编码
readAsText file,[encoding] 将文件读取为文本
readAsDataURL file 将文件读取为DataURL
abort (none) 终端读取操作

FileReader接口包含了一套完整的事件模型,用于捕获读取文件时的状态。

事件 描述
onabort 中断
onerror 出错
onloadstart 开始
onprogress 正在读取
onload 成功读取
onloadend 读取完成,无论成功失败

通过上面的方法以及事件,我们可以发现,通过readAsDataURL方法及onload事件就可以拿到一个可本地浏览图片的DataURL。

最终代码如下:

document.addEventListener('paste', function (e) { console.info(e); var cbd = e.clipboardData; var fr = new FileReader(); var html = ''; for(var i = 0; i < cbd.items.length; i++) { var item = cbd.items[i]; console.info(item); if(item.kind == "file"){ var blob = item.getAsFile(); if (blob.size === 0) { return; } console.info(blob); fr.readAsDataURL(blob); fr.on<x>load=function(e){ var result=document.getElementById("result"); //显示文件 result.innerHTML='<img src="' + this.result +'" alt="" />'; } } }});

这样我们就可以监听到用户的粘贴操作,并且将用户粘贴的图片文件实时的渲染到网页之中了。

总结

以上是我对Blob对象的一些学习分享,希望在实际应用上能对大家有所帮助。也希望大家多多支持真格学网。

少看点片,多实践实践。男人终归还得在女人身上驰骋。不是我色情,人伦大理,古之圣人且不避讳。男人对女人感兴趣,首先从本能开始的内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • javascript之blob对象类型的具体使用方法
  • js实现把图片的绝对路径转为base64字符串、blob对象再上传
  • js自动下载文件到本地的实现代码
  • 使用js代码实现点击按钮下载文件
  • js下载文件并修改文件名
  • js下载文件|无刷新下载文件示例代码
  • javascript实现的浏览器下载文件的方法
  • javascript 用fetch 实现异步下载文件功能
  • 使用 javascript 创建并下载文件(模拟点击)
  • javascript使用blob对象实现的下载文件操作示例
  • prototype与__proto__区别详细介绍
  • 修改 bootstrap table 默认detailrow样式的实例代码
  • js实现点击按钮复制文本功能
  • javascript 反科里化 this [译]
  • 微信小程序bindtap事件与冒泡阻止详解
  • bootstrap中的 form表单属性role="form"的作用详解
  • javascript oop类与继承
  • 如何实现浏览器上的右键菜单
  • es6概念 symbol tostring()方法
  • self.attachevent is not a function的解决方法
  • 最近家里给介绍个对象,但不知道对方什么想法,我该怎么做
  • 老爸的同事的儿子介绍一个对象。要我加对方微信。发送验证申请的时候应该怎么写。本人对这方面毫无经验。
  • 别人介绍的对象刚加微信该怎么聊
  • 别人处对象送祝福语
  • 饭店的服务对象有哪些
  • 大学生创业计划书中的结束语怎么写呢?
  • 用一句诗来形容自己想找对象
  • 朋友介绍对象,给了我一个微信号。第一次应该聊点什么啊。急急急
  • 别人给介绍了个对象,第一次见面,应该怎样相处,聊些什么,怎样沟通
  • 简述什么是语用学及语用学研究的内容
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础知识javascript类库表单特效广告代码网页特效黑客性质javascript技巧domnode.jsjs其它首页javascriptjavascript技巧javascript之blob对象类型的具体使用方法js实现把图片的绝对路径转为base64字符串、blob对象再上传js自动下载文件到本地的实现代码使用js代码实现点击按钮下载文件js下载文件并修改文件名js下载文件|无刷新下载文件示例代码javascript实现的浏览器下载文件的方法javascript 用fetch 实现异步下载文件功能使用 javascript 创建并下载文件(模拟点击)javascript使用blob对象实现的下载文件操作示例prototype与__proto__区别详细介绍修改 bootstrap table 默认detailrow样式的实例代码js实现点击按钮复制文本功能javascript 反科里化 this [译]微信小程序bindtap事件与冒泡阻止详解bootstrap中的 form表单属性role="form"的作用详解javascript oop类与继承如何实现浏览器上的右键菜单es6概念 symbol tostring()方法self.attachevent is not a function的解决方法js刷新页面方法大全js中settimeout()的用法详解js截取字符串常用方法详细整理js页面跳转常用的几种方式js打开新窗口的2种方式js数组与字符串的相互转换方法js设置cookie、读取cookie、删除js 将json字符串转换为json对象的js删除数组里的某个元素方法javascript深入理解js闭包js中数组排序sort方法的原理分析javascript function函数种类详解js高仿抛物线加入购物车特效实现代码让低版本浏览器支持input的placeholder属es6关于promise的用法详解javascript 多浏览器兼容性问题及解决方案简单的邮箱登陆的提示效果类似于yahoo邮箱layui form 自定义验证的实例代码js的touch事件的实际引用bootstrap3 兼容ie8浏览器!
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved