博客一个月没更新了,着实是有点忙。
目前公司新版上线也到最后一波了,部分人员转战了一个新的APP产品的开发。
主体还是原生APP,也会有部分页面需要嵌入WEB页面,我也有幸作为唯一的前端人员加入了。
不过这次讲的内容跟这个APP没有半毛钱关系,是公司内部工作系统的一个扫码上传功能。
好吧,我参与的确实有点多!
要实现实时的进度展示,需要以下几个关键:
- 异步上传
- 文件总大小
- 文件已上传大小
基本HTML结构
<input type="file" id="upload" accept="image/*" >
|
异步上传
XHR是必须的,此外还需要一个FormData
对象。
FormData,译为表单数据,也就是一个保存表单数据的容器。
可以利用这个对象写入键值对的数据项,再用xhr发送到处理接口。
var data = new FormData(); data.append('id', 9527); data.append('name', '张三'); data.append('sex', '男');
|
不仅可以像以上简单的添加值类型,文件类型也不例外。
这样就可以直接使用xhr的send方法发送到后端。
document.querySelector('#upload').addEventListener('change', function() { var file = this.files[0], data = new FormData(); data.append('photo', file); var xhr = new XMLHttpRequest(); xhr.addEventListener('load', function(event){ }, false); xhr.open('post', '/doLoad'); xhr.send(data); });
|
上传进度
与FormData相对应的上传状态监听事件
xhr.upload.addEventListener('progress', function(event){ }, false);
|
该事件可以通过event对象获取上传状态。
- event.loaded: 已上传大小
- event.total: 文件总大小
这样计算进度就不在话下了,具体实现也就不废话了,众大侠各展神通吧!