ajax上传文件带进度条的思路

  首先,需要2个重要的数据,total(文件总大小)和loaded(已经上传的大小),用 loaded/total,然后不断的更新进度条即可;

问:怎么拿到这两个重要数据呢?

答:在html5中有一个上传过程事件onprogress,在这个事件中可以读到这两个数据loaded和total;上传的时候不断的触发这个函数,然后更新进度条即可;

1         xhr.upload.onprogress = function(ev){
2             if(ev.lengthComputable){
3                 //有可能文件时分块上传,单块的文件时不能读到大小的
4                 var percent = 100*ev.loaded/ev.total;
5                 document.getElementById(‘bar‘).style.width = percent + ‘%‘;
6             }
7         }

全部代码

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3  <head>
 4   <title> new document </title>
 5   <meta name="generator" content="editplus" />
 6   <meta name="author" content="" />
 7   <meta name="keywords" content="" />
 8   <meta name="description" content="" />
 9   <script type="text/javascript">
10     function selfile(){
11         //创建formdata对象
12         var fd = new FormData();
13         //获取文件对象
14         var pic = document.getElementsByTagName(‘input‘)[0].files[0];
15         //追加到formdata里
16         fd.append(‘pic‘,pic);
17             var xhr = new XMLHttpRequest();
18         xhr.open(‘POST‘,‘04-upfile.php‘,true);
19         xhr.onreadystatechange = function(){
20             if(this.readyState == 4){
21                 document.getElementById(‘debug‘).innerHTML = this.responseText;
22             }
23         }
24
25         //利用XHR2新标准,写监听函数
26         xhr.upload.onprogress = function(ev){
27             if(ev.lengthComputable){
28                 //有可能文件时分块上传,单块的文件时不能读到大小的
29                 var percent = 100*ev.loaded/ev.total;
30                 document.getElementById(‘bar‘).style.width = percent + ‘%‘;
31             }
32         }
33         xhr.send(fd);
34
35     }
36   </script>
37   <style type="text/css">
38     #progress{
39     width:500px;
40     height:30px;
41     border:1px solid green;
42
43     #bar{
44     width:8%;
45     height:100%;
46     border:1px solid blue;
47     }
48     }
49   </style>
50  </head>
51
52  <body>
53 <div id="progress" >
54     <div id="bar" >
55
56     </div>
57 </div>
58   <input type="file" name = "pic"  onchange="selfile();"/>
59
60 <div id="debug" >
61
62 </div>
63  </body>
64 </html>
时间: 2024-10-13 16:07:19

ajax上传文件带进度条的思路的相关文章

asp.net mvc 实现上传文件带进度条

思路:ajax异步上传文件,且开始上传文件的时候启动轮询来实时获取文件上传进度.保存进度我采用的是memcached缓存,因为项目其他地方也用了的,所以就直接用这个啦.注意:不能使用session来保存进度,因为session是线程安全的不能实时获取进度,可是试试httpcache或者memorycache,这两个我没有试过,请自行尝试. ps:使用websocket来实现也是不错的,不过我没有试过,有心的大神可以去试试. 下面贴一张效果图: 前端ajax上传文件,我使用了两种jq插件.一种是a

Extjs 使用fileupload插件上传文件 带进度条显示

一.首先我们看看官方给出的插件的解释: 一个文件上传表单项具有自定义的样式,并且可以控制按钮的文本和 像文本表单的空文本类似的其他特性. 它使用一个隐藏的文件输入元素,并在用户选择文件后 在form提交的同时执行实际的文件上传. 因为没有安全的跨浏览器以编程的方式对file表单项设值的方式, 所以标准表单项的 setValue 方法是无效的. getvalue方法的返回值取决于使用何种浏览器; 一些仅仅返回文件名, 一些返回一个完整的文件路径, 一些则返回文件的虚拟路径. 二.在我看来这个插件就

asp.net 文件批量选取,批量上传,带进度条,uploadify3.2 TOP

http://www.16aspx.com/Article/3444 asp.net 文件批量选取,批量上传,带进度条,uploadify3.2 TOP,布布扣,bubuko.com

ajax上传文件及进度显示

之前在博文:原生ajax写法就提及过ajax2.0与1.0的差别是多了FormData和利用FormData文件上传(当然还有跨域,但不是本文的重点). 那么具体怎么样实现ajax上传文件呢? 一般来说,浏览器获取文件的方法有拖拽和input_file两种: // 先定义一个放文件的数组 var files = []; //拖拽事件获取文件 div.addEventListener('drop',function(ev){ //因为dataTransfer.files只是类数组,所以要用Arra

servlet多文件上传(带进度条)

需要commons-fileupload-1.3.jar和commons-io-2.4.jar的支持 页面效果:(图片文件都可以) (1)进度标识类 public class UploadStatus { private long bytesRead; private long contentLength; private int items; private long startTime = System.currentTimeMillis(); //set get 方法 省略 } (2)监听

jQuery上传文件显示进度条

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="../js/jquery.js"></script> </head> <body> <h2>HTML5异步上传文件,带进度条(jQuery)</h2> <form method="post"

XMLHttpRequest上传文件实现进度条

话不多说,直接上代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>XMLHttpRequest上传文件进度实现</title> <script type="text/javascript"> var xhr; var ot;// var oloaded; //上传文件方法 function UpladFil

vue项目上传文件以及进度条

最近做项目的时候,需要上传自定义镜像.并且附带进度条,上网查询一下资料,经过一番折磨,也总算做出来了,把自己写项目的内容给大家分享一下. 先直接贴代码吧 1.首先声明一个formData对象. 2.把需要上传的参数利用append追加进去. append('参数名','值') 第一个this.$refs.upload.files[0],其实就是input标签加上ref唯一关键字就是upload. var fd = new FormData(); fd.append('image', that.$

AJAX大文件切割上传以及带进度条。

分块传输的原理就是利用HTML5新增的文件slice截取函数. 代码如下: html: <input id="f" type="file" name="part" onchange="writeFile()"> JS: 核心部分已经加粗显示了,其他部分不用看,因为实现的方式有很多种,不一定要按照我的方式去写,但是核心是不会变的. var writeFile = function(){ var temp = null