WebUploader二次封装
来源:互联网 发布:淘宝怎么换支付宝 编辑:程序博客网 时间:2024/05/16 19:15
spadesUploader
对WebUploader的二次封装,其实是源于之前在一家公司实习的时候发现,做Java后台的上一个人对于后台管理系统的开发,前端基本是能用插件就用插件,能用库就用库,非常的暴力。以致于一开始接手的时候,看了一大堆库的用法。
当然像jQuery,Bootstrap都是必备的。然后就是插件如Boostrap validator jQuery的一堆plugin。后面接触到要开发一个上传的页面,我网上搜了一堆,发现百度的WebUploader还不错,值得一用。但是它的用法实在是有点麻烦,而且多个上传实例还要分别配置。WebUploader源码颇庞大,因为它封装了很多东西以及兼容了很多东西。
简析WebUploader
- 兼容IE6+ 以及以HTML5为主的上传组件。它支持分片和并发,也就是大文件可以分割多块并发上传。以及能够重传。
- 支持多种图片格式的预览和压缩。
- 支持多途径添加文件,比如拖拽,图片粘贴功能
- 支持了MD5,能够做文件md5值验证。
- 源码采用AMD规范,也实现AMD模块机制
- 查看源码其实可以看到分了几个模块组织代码,包括filepicker validator filepaste等都是可以拿出来单独用的。
- 所有代码都是在一个内部闭包中,对于暴露了唯一一个变量WebUploader,跟jQuery暴露$ 或 jQuery很类似,都是:return require(‘webuploader’),所以说内部是实现了一个简单的AMD模块机制
- 当然很多修复IE bug的代码,Android和 IOS的代码
- 同时它也定义了上传过程中的一系列事件像: fileQueued 、 startUpload 、 stopUpload、uploadFinished 等等,WebUploader帮我们定义了这些事件,我们需要在这些事件的回调函数中撰写我们的业务逻辑。
- 其实这也是封装的一个原因,把事件处理以及UI基本HTML的模板都封装起来了。
- 最后就是说一下其实WebUploader也实现了Promise规范。可以在WebUploader中创建Deferred对象来处理异步操作,如下:
// 在文件开始发送前做些异步操作。// WebUploader会等待此异步操作完成后,开始发送文件。Uploader.register({ 'before-send-file': 'doSomthingAsync'}, { doSomthingAsync: function() { var deferred = Base.Deferred(); // 模拟一次异步操作。 setTimeout(deferred.resolve, 2000); return deferred.promise(); }});
言归正传
封装思想:
整个模块也是封装在一个闭包内,对外是不可见的,也就是在一个匿名立即执行函数内,传入jQuery以及WebUploader。
把内部的主要函数createUpload挂载jQuery上,作为jQuery的插件使用。
$.fn.createUpload=createUpload;
但其实后面,我想在内部也实现一个简单的AMD模块机制,直接把这个createUpload暴露出来,然后就可以直接用这个模块名称创建上传组件对象。
内部实现其实我并不依赖jQuery,如果内部判断到jQuery为null,就会使用AMD的加载方式,否则就用jQuery的插件方式加载。
配置方法
Feature:
- 简化配置多个上传实例
- 封装配置操作
- 提供上传组件的基本UI
- 可以作为jQuery插件使用,导入jQuery即可,但不依赖jQuery
- 提供暴露的class 供配置样式
Usage
请在你的项目目录新建upload文件夹,并把webuploader所有文件
保存到里面 如: upload/webuploader.js upload/Uploader.swf … 的形式
在你的index.html中包含: webuploader.js 、 webuploader.css 以及 simpleSpade.js
下面主要是对这个组件配置的详解:
/*****Feature:* 简化配置多个上传实例* 封装配置操作* 提供上传组件的基本UI* 可以作为jQuery插件使用,导入jQuery即可,但不依赖jQuery* 提供暴露的class 供配置样式* 暂时提供两种组件样式供选择* * Usage* 请在你的项目目录新建upload文件夹,并把webuploader所有文件* 保存到里面 如:* upload/webuploader.js upload/Uploader.swf ... 的形式** options= {* serverPath:'../balight/photo/uploadcode',* number: 2, //创建的上传实例个数* type: img,//img or file 上传图片 or 上传普通文件* divId:id, // 你要在页面哪个div下创建这个上传组件* fileSizeLimit:,// int 所有文件的总上传大小不超过这个值* * uploadText:'',* thumbnailSize:100, //100 or 200 * }
示例代码
引入这些文件后,我们可以在自己的应用index.html或者index.js中使用这个上传组件,非常简单:
//options的部分参数的意义参见WebUploader官方文档,后续会继续更新加入更多可配置的参数,使得组件更灵活易用 var options={ serverPath:'../balight/photo/uploadcode', number:1, type:'file', divId:'testupload', uploadText:'上传组件示例', thumbnailSize:100 }; //这种是jQuery引入的方式,所以必须先把jQuery引入工程。 $.fn.createUpload(optionsx);
源码请戳传送门
Github 上传组件传送门
欢迎提bug,改进意见等。
- WebUploader二次封装
- webuploader简单封装
- 二次封装CoreData
- IOS 推送二次封装
- 浅谈AFNetworking二次封装
- 二次封装dojo slider
- Robotium API 二次封装
- Robotium API 二次封装
- AFNetWorking的二次封装
- Volley的二次封装
- volley二次封装
- Volley框架二次封装
- selenium二次封装
- Android Volley二次封装
- AFN二次封装
- glog的二次封装
- dll 二次封装
- AF二次封装
- mysql Access denied for user root@localhost错误解决方法
- Caffe 训练时loss等于87.33的原因及解决方法
- 最简单也最难:运维监控的最后1公里
- 【洛谷】P1427 小鱼的猜数游戏
- Activiti基础教程--10开始活动节点,接收活动,用户任务(个人任务,组任务)
- WebUploader二次封装
- 网络 基础知识&其他
- sqlite数据库的创建,升级和降级
- clang diagnostic的使用
- POJ-1769-线段树,dp
- 好东西,怕丢,先存一个 Looper、Handler、Message
- NNU_20161124_7PAT1008. 数组元素循环右移问题
- android 配置signalR与服务器连接通信
- hibernate自连接查询hql语句