在不少应用场景里,我们都需要让用户能先“看一眼”再决定上传——比如更换个性头像时,用户希望选完本地图片后立刻看到预览效果,而不是直接提交到服务器。这个需求说到底,就是程序要能读取本地文件。在Flash Player 10时代,FileReference类就是干这个的,而真正负责读取文件的接口是load()函数。不过,有几个关键点必须提前说清楚:
- 第一,
load()只能在UI操作中触发,比如用户点击按钮时调用,不能随意在后台代码里执行。 - 第二,加载进来的本地文件数据在AS里可以直接使用,但注意这不是服务器上的文件,不能直接当作远程资源处理。
- 第三,这是一个异步过程——文件不会瞬间加载完,必须通过监听事件来获取结果。
下面是一段完整的参考代码,实现了从浏览到预览的完整流程:
复制代码
这段代码的逻辑很清晰:应用启动时初始化FileReference并注册文件选择事件;用户点击“Browse”按钮后弹出文件选择对话框;选中文件后触发selectHandler,在该处理器中注册加载完成事件并调用load();加载完成后,将图片数据直接赋给Image组件的source属性,预览就出现了。整个过程没有涉及服务器,完全本地完成,用户体验非常流畅。