目前比较流行的Web端文件上传插件大多使用了Flash或HTML5技术,比如WebUploader。一个比较极端的情况是同时不具备以上环境,比如没有装Flash插件的IE8,基本上只剩下javascript模拟表单这一条路了。以下介绍一种比较简单的,利用CSS重写原生input(type=”file”)控件样式,实现文件异步上传的方法。
1 重写原生File控件的CSS样式
这里参考了input(file)浏览按钮美化提供的方法。
需要注意的是:IE9以下不支持opacity(透明度)属性,需要单独设置filter:alpha(opacity=0);
1 | input[type=file] |
2 利用JQuery异步提交表单
用a标签代替原生input type="file"
标签,利用JQuery在选择文件后将文件名显示在自定义文本框,点击自定义按钮时触发异步表单提交,上传完成后处理回调函数
1 | <!--注意:需要引用JQuery、JQuery Form--> |
可能有人会问:为什么这么麻烦呢?直接将file控件hidden,再写一个button,点击时触发file控件的点击事件不行吗?实际上,file控件在IE下需要由用户手动触发事件选择文件,否则在表单提交的时候会报JS错误(拒绝访问)。这就是本文为什么要把file控件做成透明的,直接接收用户的点击事件的原因。
3 .NET MVC 后台代码
1 | [ ] |
参考资料:
CSS - firefox与IE透明度(opacity)设置区别
CSS3中Opacity透明度在IE下的特殊处理