AJAX_大文件上傳(顯示進度條)


 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="utf-8">
 5 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
 6 <title>Examples</title>
 7 <meta name="description" content="">
 8 <meta name="keywords" content="">
 9 <link href="" rel="stylesheet">
10 <style>
11     #outer{
12         width: 300px;
13         height: 30px;
14         border: 1px solid red;
15         position: relative;
16         text-align: center;
17     }
18     #jdt{
19         height: 30px;
20         position: absolute;
21         z-index: -100;
22     }
23 </style>
24 </head>
25 <body>
26     <div id="outer">
27         <div id="jdt"></div>
28     </div>
29     <form id="main">
30     選擇文件 : <input type="file" name="file"><br />
31     <input type="button" value="上傳" onclick="upLoadfile()">
32     </form>
33     <script>
34         function upLoadfile() {
35             var fm=document.getElementById('main');//1. 獲取表單對象
36             var fd=new FormData(fm);//2. 實例化FormData對象
37             var xhr =new XMLHttpRequest();//3. 實例化XMLHttpRequest對象
38             xhr.open('post','upfile.php');//4. 調用open方法,准備ajax請求
39             var jdt=document.getElementById('jdt');//獲取進度條對象
40             var outer=document.getElementById('outer');
41             xhr.upload.onprogress = function(a) {//參數a是事件,onprogress事件獲取到的數據全部保存到a當中
42                 //計算每100ms文件上傳的程度占總體的百分比,取兩位小數
43                 var percent = parseInt((a.loaded/a.total)*100);
44                 //總體長度300px,計算當前進度條長度
46                 var len =  percent * 300 /100;
47                 //設定進度條寬
50                 outer.innerHTML ="<div id='jdt' style='width:"+len+"px;background:skyblue;'></div>"+ percent + '%';
51             }
52             xhr.send(fd);//5. 調用send方法,發送ajax請求
53             xhr.onreadystatechange=function () {//6. 調用onreadystatechange事件接收結果
54                 if (xhr.readyState == 4) {
55                     if (xhr.responseText == 1) {
56                         alert('文件上傳成功');
57                     } else {
58                         alert('文件上傳失敗');
59                     }
60                 }
61             }
62         }
63     </script>
64 </body>
65 </html>

 

================================================HTML代碼=============================================

 

 1 <?php
 2 /**
 3  * 
 4  * @authors Your Name (you@example.org)
 5  * @date    2017-10-29 16:42:50
 6  * @version $Id$
 7  */
 8 header("content-type:text/html;charset=utf-8");
 9 if($_FILES['file']['error'] == 0){//獲取文件error屬性值,為0時表示文件上傳成功
10   $ext=strrchr($_FILES['file']['name'],'.');//獲取文件擴展名
11   $name=time().'_'.rand(1000,9999).$ext;//隨機文件名防止文件重名
12   if(move_uploaded_file($_FILES['file']['tmp_name'],$name)){
13     echo 1;
14   }else{
15     echo 2;
16   }
17 }else{
18   echo 2;
19 }

 

=======================================================PHP代碼=========================================================

 

需要修改虛擬主機配置文件中的POST默認上傳文件大小與文件上傳大小的限制(盡量前者比后者稍大,避免文件大小和表單大小一致時表單數據無法上傳)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM