本文摘自PHP中文网,作者黄舟,侵删。
以前写过上传组件,见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器,对付一般的上传没有问题,不过如果是上传图片,且需要预览的话,就力有不逮了,趁着闲暇时间,给上传组件添加了单独的图片上传UI,支持图片预览和缩放(通过调整图片的大小以实现图片压缩)。v1.4版本已支持秒传+分片上传+断点续传(IE10+、其它标准浏览器),具体请参考Github代码。
上传组件特点
轻量级,不依赖任何JS库,核心代码(Q.Uploader.js)仅约700行,min版本加起来不到12KB
纯JS代码,无需Flash,无需更改后台代码即可实现带进度条(IE10+、其它标准浏览器)的上传,其它(eg:IE6+)自动降级为传统方式上传
单独的图片上传UI,支持图片预览(IE6+、其它浏览器)和缩放(IE10+、其它浏览器)
上传核心与UI界面分离,可以很方便的定制上传界面包括上传按钮
上传文件的同时可以指定上传参数,支持上传类型过滤
完善的事件回调,可针对上传的每个过程进行单独处理
方便的UI接口,上传界面可以随心所欲的定制
效果如上图。由于浏览器不同,压缩效果各有不同,一个1.1MB、分辨率为 1920x1200 的图片,分辨率缩放为 1024x640 ,IE11上传后为199KB,Chrome45上传后为277KB,Firefox41上传后为360KB。
使用代码
html代码,导入样式及js上传组件,定义上传按钮及视图:
1 2 3 4 5 6 |
|
js组件调用:
1 2 3 4 5 6 7 8 9 10 |
|
一般无需更改后台代码,但如果使用了图片缩放(压缩),Firefox、Chrome 较早的版本上传后,后台可能会获取不到文件名,需要略微处理一下。以asp.net为例:
1 2 3 4 5 6 7 8 9 10 11 |
|
关于上传
参见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器
关于预览
IE10+等浏览器使用html5 api,其它浏览器使用滤镜预览。需要注意的是,IE8+由于安全性考虑,会获取不到文件真实地址,需要特殊处理一下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
关于缩放(压缩)
原理是先通过canvas调整图片大小,生成base64数据,然后再通过html5 api (Blob) 转换为二进制对象上传。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
相关文章:
用HTML5轻松实现图片预览
javascript实现图片预览和上传(兼容IE)代码分享
JavaScript进阶(八)JS实现图片预览并导入服务器功能
以上就是详解html5图片上传支持图片预览压缩及进度显示兼容IE6及标准浏览器 的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
HTML5中在可拖动元素或选取的文本正在拖动到放置目标时触发的事件ondragover
HTML5 canvas标签的作用以及canvas标签的历史由来介绍
HTML5+nodejs实现websocket即时通讯的示例代码分享
更多相关阅读请进入《HTML5》频道 >>

Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者