Html5 本地文件读取 API 研究使用过程中的意外发现 - MDN

简介: Html5 本地文件读取 API 研究使用过程中的意外发现 - MDN太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)本文遵循“署名-非商业用途-保持一致”创作公用协议转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。

Html5 本地文件读取 API 研究使用过程中的意外发现 - MDN

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino否则,出自本博客的文章拒绝转载或再转载,谢谢合作。



补充:

终于可以读出肉的眼能看懂的人类文字了!!!

经在 safari 7.0.4(9537.76.4) 测试,即使关闭 WebGL 支持,File API 仍可正常读取本地文本文件内容。

下面 FileReader 的文档估计时间会稍微久远一些,不过按其描述,确实准确解读了火星语,我们地球人终于全都知道了。

接下来,语言通了,知道说的是啥了,开始贸易吧,还得继续遵循贸易规则,更得尊重当地的风俗习惯,来特俺们够!


说是原创,实际是资料搜集过程中的一个记录,从这个角度也算是原创吧!

至于内容,那可是 MDN 的原创,俺这里只能算借花献佛,非俺原创,本想翻译,后发现俺中意的内容有中文版,这也说明 MDN 对中国开发者的重视,不过也可能是我们中国开发者做的贡献,这个确实不清楚。

来个干脆的,把关注的整个页面全捞过来,也算做一个资源目录吧,详细的部分,真的太多了。

不过我想研究的是 FileReader 的文件加载过程及响应事件,异步处理嘛,肯定要有个开始与结束,面向对象的 JS ,俺确实不太熟,但用面向对象的思想来圈一圈它,还是跑不出范围的,所以,知道加速度的变化,对速度的把控,那确实是淋漓尽致!


至于俺要研究的部分,那可是本篇的核心内容,从此处算是比较权威的来源证实,Opera、Safari 还不支持这些个 API,不知这是否会成为本次研究的一个终结,还是别乱猜了,稍侯请示一下,会有结果,这个不必费心,有些时侯有些事情,确实不是我们能做得了主的,那么尽量全面的了解情况,分析整理后,提供多套可行方案和处理思路,呈报上去,自会有需要我们做的下一步工作,而至于如何选,怎么选,这个我们提供分析结果就可以了,至于最终结论,只要遵照行事即可,毕竟我们站的高度还看不到那些我们看不到的事情:

FileReader

使用FileReader对象,web应用程序可以异步的读取存储在用户计算机上的文件(或者原始数据缓冲)内容,可以使用File对象或者Blob对象来指定所要读取的文件或数据.其中File对象可以是来自用户在一个<input>元素上选择文件后返回的FileList对象,也可以来自由拖放操作生成的 DataTransfer对象,还可以是来自在一个HTMLCanvasElement上执行mozGetAsFile()方法后的返回结果.

想要创建一个FileReader对象,很简单,如下:

var reader = new FileReader();

如何在web应用程序中使用文件一文中有更详细的解释和例子.

方法概述

void abort();
void readAsArrayBuffer(in Blob blob);
void readAsBinaryString(in Blob blob);
void readAsDataURL(in Blob blob);
void readAsText(in Blob blob, [optional] in DOMString encoding);

状态常量

常量名 描述
EMPTY 0 还没有加载任何数据.
LOADING 1 数据正在被加载.
DONE 2 已完成全部的读取请求.

属性

属性名 类型 描述
error DOMError 在读取文件时发生的错误. 只读.
readyState unsigned short 表明FileReader对象的当前状态. 值为State constants中的一个. 只读
result   读取到的文件内容.这个属性只在读取操作完成之后才有效,并且数据的格式取决于读取操作是由哪个方法发起的. 只读.

方法

abort()

中止该读取操作.在返回时,readyState属性的值为DONE.

void abort();
参数

无.

抛出的异常
DOM_FILE_ABORT_ERR
当该FileReader对象没有在进行读取操作时(也就是readyState属性的值不为 LOADING时),调用 abort()方法会抛出该异常.
Note: 实现于Gecko 6.0.

Requires Gecko 7.0 (Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4)

readAsArrayBuffer()

开始读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含一个ArrayBuffer对象以表示所读取文件的内容.

void readAsArrayBuffer(
  in Blob blob
);
参数
blob
将要读取到一个 ArrayBuffer中的 Blob对象或者 File对象.

readAsBinaryString()

开始读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含所读取文件的原始二进制数据.

void readAsBinaryString(
  in Blob blob
);
参数
blob
将要读取的 Blob对象或者 File对象.

readAsDataURL()

开始读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含一个data: URL格式的字符串以表示所读取文件的内容.

void readAsDataURL(
  in Blob blob
);
参数
file
将要读取的 Blob对象或者 File对象.
例子

这个方法很有用,比如,可以实现图片的本地预览(在线演示):

<!doctype html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<title>Image preview example</title>
<script type="text/javascript">
oFReader = new FileReader(), rFilter = /^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i;

oFReader.onload = function (oFREvent) {
  document.getElementById("uploadPreview").src = oFREvent.target.result;
};

function loadImageFile() {
  if (document.getElementById("uploadImage").files.length === 0) { return; }
  var oFile = document.getElementById("uploadImage").files[0];
  if (!rFilter.test(oFile.type)) { alert("You must select a valid image file!"); return; }
  oFReader.readAsDataURL(oFile);
}
</script>
</head>

<body onload="loadImageFile();">
  <form name="uploadForm">
    <table>
      <tbody>
        <tr>
          <td><img id="uploadPreview" style="width: 100px; height: 100px;" src="data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Csvg%20width%3D%22153%22%20height%3D%22153%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%0A%20%3Cg%3E%0A%20%20%3Ctitle%3ENo%20image%3C/title%3E%0A%20%20%3Crect%20id%3D%22externRect%22%20height%3D%22150%22%20width%3D%22150%22%20y%3D%221.5%22%20x%3D%221.500024%22%20stroke-width%3D%223%22%20stroke%3D%22%23666666%22%20fill%3D%22%23e1e1e1%22/%3E%0A%20%20%3Ctext%20transform%3D%22matrix%286.66667%2C%200%2C%200%2C%206.66667%2C%20-960.5%2C%20-1099.33%29%22%20xml%3Aspace%3D%22preserve%22%20text-anchor%3D%22middle%22%20font-family%3D%22Fantasy%22%20font-size%3D%2214%22%20id%3D%22questionMark%22%20y%3D%22181.249569%22%20x%3D%22155.549819%22%20stroke-width%3D%220%22%20stroke%3D%22%23666666%22%20fill%3D%22%23000000%22%3E%3F%3C/text%3E%0A%20%3C/g%3E%0A%3C/svg%3E" alt="Image preview" /></td>
          <td><input id="uploadImage" type="file" name="myPhoto" onchange="loadImageFile();" /></td>
        </tr>
      </tbody>
    </table>

    <p><input type="submit" value="Send" /></p>
  </form>
</body>
</html>
AI 代码解读
注: IE10以下的版本不支持 FileReader()构造函数.不过可以利用滤镜来兼容旧版本的IE: 兼容IE的图片本地预览.

readAsText()

开始读取指定的Blob对象或File对象中的内容. 当读取操作完成时,readyState属性的值会成为DONE,如果设置了onloadend事件处理程序,则调用之.同时,result属性中将包含一个字符串以表示所读取的文件内容.

void readAsText(
  in Blob blob,
  in DOMString encoding 可选
);
参数
blob
将要读取的 Blob对象或者 File对象.
encoding  可选
一个字符串,表示了返回数据所使用的编码.如果不指定,默认为UTF-8.

事件处理程序

onabort
当读取操作被终止时调用.
onerror
当读取操作发生错误时调用.
onload
当读取操作成功完成时调用.
onloadend
当读取操作完成时调用,不管是成功还是失败.该处理程序在 onload或者 onerror之后调用.
onloadstart
当读取操作将要开始之前调用.
onprogress
在读取数据过程中周期性调用.

浏览器兼容性

Feature Firefox (Gecko) Chrome Internet Explorer* Opera* Safari
Basic support 3.6 (1.9.2) 7 10 Not supported Not supported

*IE9有一个File API Lab.Opera从11.10开始部分支持该API.

针对Gecko的注意事项

  • 在Gecko 2.0 beta 7 (Firefox 4.0 beta 7)之前,上述方法中所有的Blob参数都只能是一个File对象;根据最新的FileAPI草案,现在的所有的Blob参数既可以是Blob对象也可以是一个File对象.
  • 在Gecko 13.0 (Firefox 13.0 / Thunderbird 13.0 / SeaMonkey 2.10)之前,FileReader.error属性会返回一个FileError对象.根据最新的FileAPI草案,现在的FileReader.error会返回一个DOMError对象.

相关链接

附件 

文件 大小 日期 附加者为
image_upload_preview.html
2235 字节 2012-05-08 17:16:34 fusionchess
crossbrowser_image_preview.html
2021 字节 2012-05-08 20:50:14 fusionchess
Podcasts example screenshot
19864 字节 2013-09-27 06:42:04 chrisdavidmills

文档标签和贡献者

对本页有贡献的人:  ziyunfei
最后编辑者:  ziyunfei, May 16, 2014 2:28:50 AM

© 2005-2014 Mozilla 开发者网络和独立贡献者 
内容置于 这些许可证下 · g关于 MDN · 贡献代码 · 隐私政策










我倒觉得,下面的 Web 开发人员文档 ,应该从下往上看才是由浅入深;



开放的Web为开发者提供难以置信的机会。为了充分利用这些技术,你需要知道怎么使用它们。您在下面可以找到与我们相关的Web技术文档的链接。

Web 开发人员文档

Web 开发人员参考
所参考的  Web 开发文档包括HTML,CSS等
Web 开发者指南
网络开发指南提供了有用的内容,以帮助你实际地来使用网络技术做那些你想去做或者需要你去做的事情。
Web 开发者入门
A list of tutorials to take you step-by-step through learning APIs, technologies, or broad topic areas.
开发Web应用
Documentation for Web application developers; Web apps are true write-once, deploy anywhere apps for mobile, desktop, and Firefox OS.

View All...

Web技术参考

Web APIs
Reference material for each of the interfaces that comprise the Web's APIs, including the DOM and all of the related APIs and interfaces you can use to build Web content and apps.
HTML
HyperText Markup Language is the language used to describe and define the content of a Web page.
CSS
Cascading Style Sheets are used to describe the appearance of Web content.
SVG
Scalable Vector Graphics let you describe images as sets of vectors and shapes in order to allow them to scale smoothly regardless of the size at which they're drawn.
MathML
The Mathematical Markup Language makes it possible to display complex mathematical equations and syntax.

Temporary

The stuff below here is temporary to help keep track of things while organization work is ongoing. Pay it no mind.

文档标签和贡献者

对本页有贡献的人:  Sheppyshura-chinaziyunfeishengyouxiaowanywn_0liminjunteddywu
最后编辑者:  liminjun, Apr 1, 2014 2:21:36 AM

© 2005-2014 Mozilla 开发者网络和独立贡献者 
内容置于 这些许可证下 · g关于 MDN · 贡献代码 · 隐私政策


















目录
打赏
0
0
0
0
25
分享
相关文章
深入研究:京东店铺所有商品API详解
本文介绍了一款强大的工具——京东店铺所有商品API,它可以帮助用户批量获取指定京东店铺的商品详细信息。通过传入店铺ID,API可返回包括商品名称、价格、库存、销量等在内的多维度数据,响应格式为JSON。文章还提供了Python调用示例,利用`requests`库完成签名生成与数据请求,助力商家管理店铺、开发者构建应用及数据分析人员挖掘商业价值,极大提升电商运营效率。
78 16
深入研究:1688商品评论API详解
本文介绍如何通过第三方数据服务平台获取1688商品评论数据。由于1688官方未提供通用评论API,商家和研究人员可借助第三方接口分析消费者反馈、优化产品与服务。使用时需注册账号获取API Key,并通过必要参数(如商品ID、页码等)调用接口,返回JSON格式的评论数据。文中提供了Python示例代码,利用`requests`库发送请求,帮助用户快速上手,注意根据实际平台调整API地址和参数。
54 12
深入研究:Shopee 商品详情 API 接口详解
Shopee 商品详情 API 是针对东南亚及中国台湾地区电商开发者的强大工具,可获取商品的详细信息(如价格、库存、描述等),支持竞品分析与市场调研。通过 HTTP GET/POST 请求,传入商品 ID 等参数,返回 JSON 格式的商品数据,包括基本信息、销售数据、商家信息等。以下是 Python 示例代码,展示如何使用 requests 库调用该接口并处理响应数据。注意实际应用需遵循 Shopee 认证要求。
深入研究:京东图片搜索商品API详解
京东图片搜索商品API简介:在电商快速发展的背景下,用户需求日益多样化。为提升购物体验,京东推出图片搜索商品API,通过上传商品图片(如实物图或宣传图),利用图像识别技术匹配京东商品库,返回相似商品的信息(如名称、价格、销量等)。该API采用HTTP POST请求方式,支持JPEG、PNG等常见图片格式,并可设置分类范围和结果数量限制等可选参数,助力开发者实现更精准的商品搜索,优化用户体验,同时为数据分析与个性化推荐提供支持。本文详细介绍了其功能、使用方法及Python请求示例。
|
16天前
|
深入研究:1688 商品详情 API 详解
1688商品详情API助力电商数据分析与决策!通过该接口,开发者可基于商品ID快速获取1688平台上商品的标题、价格、规格、图片等多维信息。企业能优化商品策略,提升竞争力。使用前需注册开发者账号、创建应用并申请权限,调用时传入必要参数(如app_key和商品ID),返回JSON/XML格式数据,涵盖商品基本信息、描述、图片及商家资料等内容。
深入研究:1688商品跨境属性API接口详解
本文介绍了如何通过 1688 商品跨境属性 API 获取商品的跨境相关数据,助力企业开展电商业务。文章分为三部分:引言阐述了接口的重要性及应用场景;接口概述详细说明了调用步骤,包括参数准备、签名生成、请求发送和响应处理;Python 请求示例提供了一个完整的代码实现,帮助开发者快速上手。示例代码涵盖了请求参数配置、签名生成逻辑以及使用 requests 库发送请求的过程,为实际应用提供了参考。
57 13
深入研究:京东商品评论API详解
京东商品评论API助力电商数据分析与优化。通过该接口,开发者可获取商品评论内容、时间、评分等详细信息,以及好评率、差评率等统计数据。适用于用户体验分析、市场调研等场景。使用前需注册开发者账号、申请权限,并正确配置参数(如app_key、商品ID等)。返回数据为JSON格式,便于解析与应用。
96 10
深入研究:1688 商品列表 API 详解
1688商品列表API为电商数据分析、竞品调研等场景提供程序化数据获取方式。通过关键词、价格区间、销量范围及类目等条件筛选商品,返回商品标题、价格、销量等基本信息。支持HTTP GET/POST请求,响应格式为JSON或XML,助力业务分析与决策。
深入研究:京东商品视频 API 详解
京东商品视频API简介:该API可基于京东商品ID获取商品视频信息,包括标题、描述、播放地址、缩略图及视频时长等,助力开发者和商家实现个性化展示与智能推荐。接口采用HTTP GET方式请求,返回JSON格式数据。示例代码展示了通过Python的requests库调用API并生成签名的过程,确保请求安全可靠。此API有助于提升电商应用的用户体验与竞争力。
深入研究:1688店铺所有商品API详解
在电商业务中,获取1688店铺商品信息对于数据分析和竞品调研至关重要。由于1688官方未提供通用API,可借助第三方数据服务平台实现自动化采集。通过注册账号获取API Key,调用接口并传入店铺ID、页码等参数,即可返回商品标题、价格、销量等JSON格式数据。文中提供了Python示例代码,帮助用户快速上手,注意根据具体平台调整API地址与参数要求。