?
?
ES6原生实战Uploader工具类(从设计到实现)
?
?
作者:Chaser (本文来自作者投稿)? ? ?
原文地址:https://juejin.im/post/5e5badce51882549652d55c2
源码地址:/impeiran/Blog/tree/master/uploader
前言
本文将带你基于ES6的面向对象,脱离框架使用原生JS,从设计到代码实现一个Uploader基础类,再到实际投入使用。通过本文,你可以了解到一般情况下根据需求是如何合理构造出一个工具类lib。
需求描述
相信很多人都用过/写过上传的逻辑,无非就是创建input[type=file]标签,监听onchange事件,添加到FormData发起请求。
但是,想引入开源的工具时觉得增加了许多体积且定制性不满足,每次写上传逻辑又会写很多冗余性代码。在不同的toC业务上,还要重新编写自己的上传组件样式。
此时编写一个Uploader基础类,供于业务组件二次封装,就显得很有必要。
下面我们来分析下使用场景与功能:
选择文件后可根据配置,自动/手动上传,定制化传参数据,接收返回。
可对选择的文件进行控制,如:文件个数,格式不符,超出大小限制等等。
操作已有文件,如:二次添加、失败重传、删除等等。
提供上传状态反馈,如:上传中的进度、上传成功/失败。
可用于拓展更多功能,如:拖拽上传、图片预览、大文件分片等。
然后,我们可以根据需求,大概设计出想要的API效果,再根据API推导出内部实现。
可通过配置实例化
const uploader = new Uploader({
url: ,
// 用于自动添加input标签的容器
wrapper: null,
// 配置化的功能,多选、接受文件类型、自动上传等等
multiple: true,
accept: *,
limit: -1, // 文件个数
autoUpload: false
// xhr配置
header: {}, // 适用于JWT校验
data: {} // 添加额外参数
withCredentials: false
});
状态/事件监听
// 链式调用更优雅
uploader
.on(choose, files = {
// 用于接受选择的文件,根据业务规则过滤
})
.on(change, files = {
// 添加、删除文件时的触发钩子,用于更新视图
// 发起请求后状态改变也会触发
})
.on(progress, e = {
// 回传上传进度
})
.on(success, ret = {/*...*/})
.on(error, ret = {/*...*/})
外部调用方法
这里主要暴露一些可能通过交互才触发的功能,如选择文件、手动上传等
uploader.chooseFile();
// 独立出添加文件函数,方便拓展
// 可传入slice大文件后的数组、拖拽添加文件
uploader.loadFiles(files);
// 相关操作
uploader.removeFile(file);
uploader.clearFiles()
// 凡是涉及到动态添加dom,事件绑定
// 应该提供销毁API
uploader.destroy();
至此,可以大概设计完我们想要的uploader的大致效果,接着根据API进行内部实现。
内部实现
使用ES6的class构建uploader类,把功能进行内部方法拆分,使用下划线开头标识内部方法。
然后可以给出以下大概的内部接口:
class Uploader {
// 构造器,new的时候,合并默认配置
constructor (option = {}) {}
// 根据配置初始化,绑定事件
_init () {}
// 绑定钩子与触发
on (evt) {}
_callHook (evt) {}
// 交互方法
chooseFile () {}
loadFiles (files) {}
removeFile (file) {}
clear () {}
// 上传处理
upload (file) {}
// 核心ajax发起请求
_post (file) {}
}
构造器 - constructor
代码比较简单,这里目标主要是定义默认参数,进行参数合并,然后调用初始化函数
class Uploader {
constructor (option = {}) {
const defaultOpt
您可能关注的文档
最近下载
- 2025年南京信息职业技术学院单招语文测试试卷.docx VIP
- 南京信息职业技术学院单招《数学》过关检测试卷附答案详解(基础题).docx VIP
- 2025年南京信息职业技术学院单招语文测试模拟试卷通用题库.docx VIP
- 男频网络小说标题用词特点研究.docx
- 2025年南京信息职业技术学院单招(语文)测试模拟试卷完整版.docx VIP
- 丰年虾养殖技术培训课件.ppt VIP
- 教学课件 社会研究方法(第五版)风笑天.ppt
- 认知觉醒-一部普通人的进阶宝典.docx VIP
- 海兴海林水产饲料有限公司丰年虫卵加工扩建项目环评报告表.DOC VIP
- PSP-641U备用电源自投装置(常规站)技术说明书.pdf VIP
原创力文档

文档评论(0)