注:阅读本文需要对js,flash,php有一定基础。
html里面,上传我们需要弄一个<input type="file" name="a"/>这样的东西来上传,点击按钮就弹出上传对话框,flash里面我们需要 调用FileReference对象的一个实例来实现弹窗。
var o = new FileReference();
o.browse();//这步会弹出窗口
这是一个主动触发的过程,就像js一样,我们需要放在一个比如按钮的点击事件里调用该方法,类似下面:
on...=function(){o.browse();}
选中文件以后,用下面的代码进行上传:
var req:URLRequest = new URLRequest("/get.php");//提交到你的处理页面
o.upload(req,"upimg");//upimg是为你的上传文件取个名字,这样get.php处理的时候才知道获取是什么名,好比(<input type="file" name="upimg"/>)
这样我们就成功把文件提交到get.php了,跟表单提交效果一样。
下面开始我们的主题,要实现上传进度,要先了解下FileReference的几个事件:
onselect//选中文件的时候触发
onopen//开始上传文件的时候触发
onprocess//上传过程中触发,会随着上传内容增加,多次触发,在此事件里我们可以获取到总字节数和已经上传的字节数
oncomplete//上传完毕后触发
监听事件的方法:
function func(e){
//处理函数
}
o.addEventListener(event,func);
这样就实现了对某个事件的监听
用这些事件,我们很容易就能知道该上传的各个状态,百分比,但这些flash代码,我们是需要在页面里面实现动态上传进度,最好能在这些处理事件里面调用js函数,由js函数来控制html来显示装置进度。
很幸运,flash提供了这样的方法:
ExternalInterface.call(js函数名字,参数....);//这样就等于调用了html页面里的 js函数名(参数...)
这样我们就可以间接的用js实时显示上传进度了.
//swf.prototype.onprocess会在上传过程中不停的被调用
下面贴出代码
flash代码放在第一帧即可
get.php 注意,我的文件格式是utf-8
另外flash向服务器(get.php)提交上传文件的时候,会自动把flash所在页面cookie信息带上,这样我们在get.php里面就不会有用户认证的问题,照样可以识别session,cookie