使用FormData实现文件多次添加累加上传和选择删除(只支持IE8以上)

先废话一波~~

原本的多文件上传功能在选择文件时,只能通过同一范围的鼠标框选或者ctrl/shift多选取选择文件,这样选择文件很不灵活,而且在确定之后如果漏选了文件,再次点击上传按钮时会清空表单里的文件信息,只能重复之前的操作去选文件再加上漏选的文件,十分不方便。

所以在大部分网站上选择图片上传都是可以累加的,就是在第一次选择完文件点击确定后,第二次再点击上传按钮选文件会自动跟第一次的接在一起,然后展示在界面上,方便用户单独进行删除。文章的主旨就是在不用插件的情况下实现这样的效果。

实现

思考过程基本是:最后要得到的是文件数组MultipartFile[] → 页面ajax传递参数要为数组 → 把文件放到能灵活操作的js数组里 → 通过change方法能在选择文件后放到js数组 → FormData能灵活地把js数组里的对象封装成表单信息(FormData兼容ie8以上)。

记得要清空input file里面的信息,因为change是在input里的信息发生改变时才触发,如果没清空,在上传跟上一次操作一样的文件时,就不会触发方法。例如:选择了A文件,不小心点删除了,再次选择A文件就会失败。

JS文件上传以及进度条实现

JS文件上传,依靠

这个标签可以完成文件上传的操作,这里就不细说,这里主要说一下进度条的实现。

想要实现进度条我们需要了解一个对象 XMLHttpRequestProgressEvent接口

这个接口有3个属性,都是只读的。

ProgressEvent.lengthComputable表示当前的工作是否是可测量的,如果为false则loaded和total两个接口不可用,一般这个是trueProgressEvent.loaded表示已完成的进度,只计算文件本身,不包括HTTP请求的开销ProgressEvent.total 表示当前工作的总量,只计算文件本身,不包括HTTP请求的开销

下面直接上代码

HTML

    
//进度条

这里有一个表单上传域,以及一个进度条的样式

JS

1、js检测 ev.lengthComputable 进度并开始计算上传进度

2、上传进度百分比= 100* ev.loaded/ev.total

本站内容来自用户投稿,如果侵犯了您的权利,请与我们联系删除。联系邮箱:835971066@qq.com

本文链接:http://news.xiuzhanwang.com/post/1115.html

发表评论

评论列表

还没有评论,快来说点什么吧~

友情链接: