文件上传已是老生常谈了。
文件上传,原始的方法有:
- form表单提交。
- 通过iframe+form表单进行模拟异步上传。
由于Http协议的限制,在处理大文件上传会存在超时的现象。在旧的浏览器中是无法读取文件二进制数据。无法将文件以分片的方式进行上传。
最近由于产品需求,在不安装插件的情况下上传大文件(百度webuploader开源项目做得已经很不错了,但在秒传和低版本浏览器上使用flash不太符合要求)。
于是重新撸了一把html大文件上传(整个项目是spring boot搭建)。
先来简单的介绍用了哪些javascript类库
- File 文件
- FileRead 读取文件
- XMLHttpRequest 上传文件
- FormData 上传时所需数据
- spark-md5 用于MD5 HASH值计算(第三方插件)
本次实现拖拽上传,用到了页面拖拽事件:ondragenter,ondragleave,ondragover,ondrop
实现思路
- 建立一个上传队列。
- 通过拖拽获取得到文件。
- 为每个文件添加各自的上传方法。
- 秒传判断
- 上传分片文件 (后台存放临时分片文件)
- 合并文件
- 添加文件到上传队列。
最终效果
代码部分
html
1 |
|
MD5
1 | //md5 |
上传类
1 | //文件上传类 |
拖拽
1 | //拖拽 |