4.6 KiB
上传功能实现计划
1. 需求分析
1.1 现有功能
-
当前
G3File组件的上传功能通过onUpload回调函数处理 -
上传按钮点击时,会获取所有状态为
pending的文件并调用onUpload回调 -
没有内置的上传实现,完全依赖外部回调
1.2 需求目标
-
实现阿里云内部上传方法
-
保留外部方法,允许用户动态获取阿里云key等信息
-
支持外部自定义上传方法
-
只上传未上传(状态为
pending)的文件 -
上传成功后,将上传成功的 fileitem 传给外部调用,上传成功一个就触发一次
2. 技术方案
2.1 核心功能设计
- 上传配置:添加上传相关的配置选项,包括阿里云上传配置和自定义上传方法
- 上传方法:实现阿里云内部上传方法和外部自定义上传方法的支持
- 上传流程:优化上传流程,只上传未上传的文件,上传成功后触发回调
- 状态管理:管理文件的上传状态,包括
pending、uploading、uploaded、failed等
2.2 配置选项
-
uploadConfig:上传配置对象,包含阿里云上传配置和自定义上传方法 -
onUploadSuccess:上传成功回调,上传成功一个文件就触发一次 -
onUploadError:上传失败回调 -
onUploadComplete:所有文件上传完成回调
2.3 上传流程
- 用户点击上传按钮
- 组件获取所有状态为
pending的文件 - 检查是否配置了自定义上传方法,如果有则使用自定义方法
- 如果没有自定义上传方法,则使用阿里云内部上传方法
- 逐个上传文件,更新文件状态为
uploading - 上传成功后,更新文件状态为
uploaded,并触发onUploadSuccess回调 - 上传失败后,更新文件状态为
failed,并触发onUploadError回调 - 所有文件上传完成后,触发
onUploadComplete回调
3. 实现步骤
3.1 修改 HTML 结构
- 无需修改 HTML 结构,使用现有的上传按钮
3.2 扩展 JavaScript 功能
-
添加上传配置选项:在
defaults中添加上传相关的配置选项 -
实现上传方法:
-
internalUpload:内部上传方法,支持阿里云上传 -
handleUpload:处理上传逻辑,支持自定义上传方法
-
-
更新上传流程:修改
$btnUpload的点击事件处理,使用新的上传逻辑 -
添加回调方法:实现
onUploadSuccess、onUploadError、onUploadComplete回调
3.3 优化 CSS 样式
- 为上传状态添加相应的样式,如上传中、上传失败等
3.4 测试和验证
- 测试阿里云内部上传功能
- 测试外部自定义上传方法
- 测试上传状态管理
- 测试回调函数触发
4. 预期效果
4.1 上传功能
-
支持阿里云内部上传
-
支持外部自定义上传方法
-
只上传未上传的文件
-
上传成功后触发回调
4.2 状态管理
-
清晰的上传状态管理
-
上传中、上传成功、上传失败等状态的视觉反馈
4.3 回调机制
-
上传成功一个文件就触发一次
onUploadSuccess回调 -
上传失败触发
onUploadError回调 -
所有文件上传完成触发
onUploadComplete回调
5. 风险评估
5.1 潜在风险
-
阿里云上传配置复杂,可能出现配置错误
-
自定义上传方法可能与内部上传逻辑冲突
-
上传过程中可能出现网络错误
5.2 风险缓解措施
-
提供详细的配置文档
-
确保自定义上传方法与内部上传逻辑的兼容性
-
添加错误处理和重试机制
6. 实现细节
6.1 上传配置
uploadConfig: {
aliyun: {
// 阿里云配置是可选的
// getUploadToken 是必须的,用于动态获取上传凭证
getUploadToken: null // 动态获取上传凭证的函数,返回 Promise
},
customUpload: null // 自定义上传方法
}
6.2 回调函数
onUploadSuccess: function(file) {
// 上传成功回调
},
onUploadError: function(file, error) {
// 上传失败回调
},
onUploadComplete: function(successCount, failCount) {
// 所有文件上传完成回调
}
6.3 上传方法
-
internalUpload(file, callback):内部上传方法 -
handleUpload(files):处理上传逻辑
7. 代码结构
7.1 主要修改文件
custom-file/index.js:扩展上传功能
7.2 新增方法
-
internalUpload:内部上传方法 -
handleUpload:处理上传逻辑 -
updateFileStatus:更新文件状态
7.3 修改方法
-
init:初始化上传配置 -
bindEvents:更新上传按钮的点击事件处理