HTML 5 关于文件读取学习笔记

来源:互联网 发布:北京软件测试培训班 编辑:程序博客网 时间:2024/05/17 22:13

对象URL也被称为blob URL,指的是引用保存在File或Blob中数据的URL。使用对象URL的好处是,我们没有必要去调用File Reader就可以读取到对应的数据。为了创建对象URL,可以使用window.URL.createObjectURL()方法创建,并传入一个File或Bolb对象。其兼容的处理方案如下:

复制
  1. function createObjectURL(blob) {
  2. if(window.URL) {
  3. return window.URL.createObjectURL(blob);
  4. }else if(window.webkitURL) {
  5. return window.webkitURL.createObjectUrl(blob);
  6. }else {
  7. return null;
  8. }
  9. }

以下是一个示例,通过blob插入到img标签中:

HTML代码

复制
  1. <label for="imageList">请选择文件<input type="file" id="imageList" multiple name="image" accept="image/*" /></label>
  2. <p id="imageRemark">暂无内容</p>

JS 代码

复制
  1. window.addEventListener('load',function(){
  2. var imageList = document.getElementById('imageList'),
  3. imageRemark = document.getElementById('imageRemark');
  4.  
  5. imageList.addEventListener('change',function(e){
  6. if(!this.files.length) return ;
  7.  
  8. var url = null,
  9. i= 0,
  10. l=this.files.length,
  11. html = '';
  12. for(;i<l;i++){
  13. url = createObjectURL(this.files[i]);
  14. if(url) {
  15. html+= '<img src=\"' + url +'\"/>';
  16. }
  17. url = null;
  18. }
  19.  
  20. imageRemark.innerHTML = html;
  21.  
  22. },false);
  23. },false);

以上代码中,其实是直接读取图片文件放入到内存中,然后创建对象URL来形成内存中的引用。直接插入到img标签上,相比用FileReader来讲,效率确实高出很多。但由于文件读取是放在内存中,如果存在对图片的引用,那么图片占用的内存就不会被释放。要手动去清除内存的话,就可以直接把对象URL当作参数的形式传给window.URL.revokeObjectURL()。由于不同浏览器带的前缀不同,所以就有了以下的兼容函数:

复制
  1. function revokeObject(url){
  2. if(window.URL) {
  3. window.URL.revokeObjectURL(url);
  4. } else if(window.webkitURL) {
  5. window.webkitURL.revokeObjectURL(url)
  6. }
  7. }

0 0
原创粉丝点击