「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战」
概述
数据入导出功能是程序员开发中比较常见的功能,操作导入导出的人为业务人员,大批量数据的导入导出往往需要长时间的等待,为了让操作人员对导入导出进度直观可见,为导入导出功能添加进度条就是的该功能的使用体验有值得提升。
效果演示
开发流程
- 在“上传” 按钮下方编写静态进度条html代码,默认为隐藏状态
1 | css复制代码<div id="progress" style="height:20px;width:100%;background: #efefef;border:1px solid #eee;border-radius:10px;display:none;"> |
效果如下:
说明:具体使用时通过动态修改内部div的宽度即可实现进度条的变化。
- 在文件上传Form表单内添加taskId隐藏框,完整html代码如下:
1 | css复制代码<button style="width: 100px;" onclick="upload()" id="uploadBtn">上传</button> (仅限CSV格式)<br><br> |
说明: 添加taskId用来标识本次上传的任务唯一性
3. 编写文件上传js代码
文件上传开始初始化进度条展示,进度为零,然后开启一个定时任务定时更新上传进度,进度值通过后台接口获取。代码如下:
1 | javascript复制代码function upload(){ |
- 编写Java处理上传业务代码
主要逻辑为,获取文件总条数,然后循环读取记录分批处理,同时更新任务进度(已经处理记录数占总条数的百分比)入内存(集群环境可以存入中间件如redis),key为taskId,value为百分比值。
1 | ini复制代码public void execute() throws Exception{ |
总结
- 超大数据文件处理需要分批处理。
- 前端组件需要先编写静态页面,然后将其动态化
本文转载自: 掘金