目前的技术背景下,从网页上传文件常用的有两种方式:flash和form的input控件。
一般我们希望上传文件应该有这样几个功能:
1. 读取文件大小
2. 上传进度
3. 上传成功与否
4. 多文件同时异步上传
一、利用flash可以实现以上的文件上传机制,但是有个缺陷,不能支持https上传。另外js和flash的交互比较复杂,除了文件名之外,因为安全因素js还不能从flash的文件控件中获取其他文件信息(文件大小,绝对路径)。
二、利用form的input控件可以得到浏览器的原生支持,由于提交form需要刷新整个页面,为了达到异步上传的效果,可以在一个隐藏的iframe里提交这个form。
用input控件不能读取文件大小,不能知道上传进度,但是可以支持https,而且不用担心用户浏览器没有安装flash。
判断上传成功与否可以利用iframe的onload事件;实现多个文件同时上传可以利用多个form对应多个iframe;文件大小判断可以由server实现并返回结果。
另外有些页面的UI需要美化上传按钮,可以利用一个透明度为o的input遮盖在此按钮上面,并利用css的clip属性将input控件裁成跟按钮一样大就可以了。如果按钮上需要响应事件,那就要把input控件上的事件传过去。