-
Notifications
You must be signed in to change notification settings - Fork 25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Blob对象 #10
Comments
这部分是如何实现的? 在ImageLoader代码中没看出来。 |
@Jiaoweiquan 不加 |
@pfan123 其实这个ajax先去获取图片内容,变成同域blob: 也是要设置跨域头的对吧。这样的话有什么分别呢? |
@mapleeit 处理图片canvas跨域(避免增加crossOrigin = "Anonymous",生成当前域名的url,然后 URL.revokeObjectURL()释放,createjs有用到),理解一下这句话 |
一直以来,JS都没有比较好的可以直接处理二进制的方法。而Blob的存在,允许我们可以通过JS直接操作二进制数据。
Blob对象
一个 Blob对象表示一个不可变的, 原始数据的类似文件对象。Blob表示的数据不一定是一个JavaScript原生格式。 File 接口基于Blob,继承 blob功能并将其扩展为支持用户系统上的文件。
构造Blob对象
生成Blob对象有两种方法:一种是使用Blob构造函数,另一种是对已有的Blob对象使用slice()方法切出一段。
Blob构造函数
返回一个新创建的 Blob 对象,其内容由参数中给定的数组串联组成。
Blob构造函数接受两个参数:
参数data是一组数据,所以必须是数组,即使只有一个字符串也必须用数组装起来.
参数options是对这一Blob对象的配置属性,目前也只有一个type也就是相关的MIME需要设置 type的值:
'text/csv,charset=UTF-8'
设置为csv格式,并设置编码为UTF-8,'text/html'
设置成html格式。Blob属性
slice() 创建
slice()返回一个新的Blob对象,包含了源Blob对象中指定范围内的数据。
参数说明:
start 可选,开始索引,可以为负数,语法类似于数组的slice方法.默认值为0.
end 可选,结束索引,可以为负数,语法类似于数组的slice方法.默认值为最后一个索引.
contentType可选 ,新的Blob对象的MIME类型,这个值将会成为新的Blob对象的type属性的值,默认为一个空字符串.
URL.createObjectURL()
URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。
使用URL.createObjectURL()函数可以创建一个Blob URL,参数blob是用来创建URL的File对象或者Blob对象,返回值格式是:blob://URL。
URL.revokeObjectURL()
URL.revokeObjectURL() 静态方法用来释放一个之前通过调用 URL.createObjectURL() 创建的已经存在的 URL 对象。当你结束使用某个 URL 对象时,应该通过调用这个方法来让浏览器知道不再需要保持这个文件的引用了。
Blob的使用
上面的代码将Blob URL赋值给a,点击后提示下载文本文件data.txt,文件内容为“Hello World”。
2.Blob 响应
总结
目前,Blob对象大多是运用在,处理大文件分割上传(利用Blob中slice方法),处理图片canvas跨域(避免增加crossOrigin = "Anonymous",生成当前域名的url,然后 URL.revokeObjectURL()释放,createjs有用到),以及隐藏视频源路径等等。
① 大文件分割上传
② 图片跨域请求,处理跨域问题,参考 createjs ImageLoader.js
③ 隐藏视频源路径
④ Web Worker 串行加载优化
一般形式 :
main.js:
worker.js:
使用 Blob、URL.createObjectURL 优化后:
⑤ 使用 createObjectURL(blob) 输出页面,移动端长按保存,转发
测试demo
实例发现,经过 revokeObjectURL(url) 将丧失长按保存转发所有功能,不释放兼容性不是特别好,目前ios全部支持,andriod部分机型不支持
参考资料:
文件和二进制数据的操作
XMLHttpRequest2 新技巧
URL.createObjectURL()
Sending and Receiving Binary Data
createjs ImageLoader.js
URL.createObjectURL和URL.revokeObjectURL
JavaScript多线程编程
Web Workers 资源跨域问题
worker-loader
The text was updated successfully, but these errors were encountered: