译注:原文是《JavaScript高级程序设计》的作者Nicholas Zakas写的,本翻译纯属为自己学习而做,仅供参考。原文链接:这里


学习到这里,你已经了解在传统方式中如何使用文件,你可以上传文件到服务端,可以从磁盘上读取文件,这些都是最常见的文件处理方式。但是,有一种全新的文件处理方式可以简化这些常见的任务,这就是使用对象URLs。

什么是对象URL?

对象URLs是磁盘上的文件地址。比如说,你想要将用户系统的一个图像文件显示到web页面,服务端无需要知道这个文件,所以也不需要上传它。如果你只是想要加载文件到页面,你可以像之前的帖子说的一样,获取一个File对象引用,将数据读取为一个数据URI,然后将数据URI分配到一个<img>元素。但想一想这里面的浪费,图像已经在磁盘上存在,为什么还要将图像读取为另外一种形式呢?如果你创建一个对象URL,你可以将其分配给<img>,这样就可以直接访问本地文件。

它如何工作?

File API[1]定义了一个全局对象叫URL,它有2个方法。第一个是createObjectURL(),接受一个File对象作为参数,返回一个对象URL,作用是告诉浏览器创建并且管理一个本地文件的URL。第二个方法是revokeObjectURL(),作用是告诉浏览器去销毁作为参数传入的URL,有效的释放内存。当然,一旦web页面被卸载了,则所有对象URLs都会被注销,当不再需要它们的时候,这是释放它们内存的一个好机会。

File API对URL对象的支持不像其他部分那么好,在我写这篇文章的时候,IE10和Firefox9+支持一个全局URL对象。Chrome支持它的webkitURL形式,Safari和Opera不支持。

例子

如果你没有读取图片文件的数据,你怎么显示这个图片呢?假设你已经提供给用户文件选择的方式,并且现在有这个文件对象的引用并赋给了一个变量file。你可以如下使用:

1
2
3
4
5
6
7
8
9
10
var URL = window.URL || window.webkitURL, imageUrl, image; if (URL) {   imageUrl = URL.createObjectURL(file);   image = document.createElement("img");   image.onload = function() {     URL.revokeObjectURL(imageUrl);   };   image.src = imageUrl;   document.body.appendChild(image); } 

更多相关文章

  1. 使用HTML文件中的React调用.js文件中的Javascript函数
  2. 我在显示随机选择的对象时遇到问题
  3. [转]在网页中加入声音文件,并且用JavaScript对其进行播放控制
  4. 如何在JavaScript / jQuery中获取对象的属性?
  5. 【JavaScript】JavaScript的对象-对象专门语句
  6. 令人惊奇的JavaScript面向对象(一)
  7. JavaScript面向对象程序设计三——原型模式(上)
  8. 迭代angularjs中对象中的属性列表
  9. Safari / Chrome中的全局控制台对象被重置

随机推荐

  1. android aidl(android studio)
  2. 【Android开发】- HelloWorld
  3. AT91G45——Android2.2移植补丁
  4. 知识点笔记
  5. Android的各种Drawable
  6. Android对应的版本号
  7. Android 文件的选择
  8. android在service中使用AsyncHttpClient
  9. Android 之事件的分发和消费机制
  10. android:configChanges名词解析(文档翻译)