項目需求:1.PHP+Ajax無刷新帶進度條圖片上傳,2.帶進度條。所需插件:jquery.js,jquery.form.js。javascript
最近在作一個手機web項目,須要用到Ajax上傳功圖片能,項目要求PHP無刷新上傳圖片,而且要帶進度條,下面就來說一下個人實現方法,php
先看效果圖:css
本示例須要使用的是jquery.js,jquery.form.js,demo裏面包含有,你能夠在文章下方進行下載。html
第一步,創建前端頁面index.html前端
此段是前端展現內容,這裏須要說明的是因爲input:file標籤顯示不太美觀,因此我把它隱藏了。而使用一個a標籤.uploadbtn來調用file標籤的click事件,用來打開並選擇文件。java
注意:文件上傳時form的屬性enctype必須設置爲:multipart/form-datajquery
html:web
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title>php-ajax無刷新上傳(帶進度條)demo</title> <meta name="description" content="" /> <meta name="viewport" content="width=device-width , initial-scale=1.0 , user-scalable=0 , minimum-scale=1.0 , maximum-scale=1.0" /> <script type='text/javascript' src='js/jquery-2.0.3.min.js'></script> <script type='text/javascript' src='js/jquery.form.js'></script> <link href="css/style.css" rel="external nofollow" type="text/css" rel="stylesheet"/> </head> <body> <div style="width:500px;margin:10px auto; border:solid 1px #ddd; overflow:hidden; "> <form id='myupload' action='upload.php' method='post' enctype='multipart/form-data'> <input type="file" id="uploadphoto" name="uploadfile" value="請點擊上傳圖片" style="display:none;" /> </form> <div class="imglist"> </div> <p class="res"></p> <div class="progress"> <div class="progress-bar progress-bar-striped"><span class="percent">50%</span></div> </div> <a href="javascript:void(0);" rel="external nofollow" onclick="uploadphoto.click()" class="uploadbtn">點擊上傳文件</a> </div> </body> </html>
第二步,Ajax提交部分ajax
這部份就是Ajax的提交部份,過程以下:json
<script type="text/javascript"> $(document).ready(function(e) { var progress = $(".progress"); var progress_bar = $(".progress-bar"); var percent = $('.percent'); $("#uploadphoto").change(function(){ $("#myupload").ajaxSubmit({ dataType: 'json', //數據格式爲json beforeSend: function() { //開始上傳 progress.show(); var percentVal = '0%'; progress_bar.width(percentVal); percent.html(percentVal); }, uploadProgress: function(event, position, total, percentComplete) { var percentVal = percentComplete + '%'; //得到進度 progress_bar.width(percentVal); //上傳進度條寬度變寬 percent.html(percentVal); //顯示上傳進度百分比 }, success: function(data) { if(data.status == 1){ var src = data.url; var attstr= '<img src="'+src+'">'; $(".imglist").append(attstr); $(".res").html("上傳圖片"+data.name+"成功,圖片大小:"+data.size+"K,文件地址:"+data.url); }else{ $(".res").html(data.content); } progress.hide(); }, error:function(xhr){ //上傳失敗 alert("上傳失敗"); progress.hide(); } }); }); }); </script>
第三步,後端PHP代碼upload.php
後端處理代碼,就是PHP文件上傳,不過上傳的時候須要作一些判斷,如文件格式、文件大小等。
注意:我上面ajax返回格式是json,因此在圖片json代碼是必定要正確規範,不然會出現上傳不成功的提示。
$picname = $_FILES['uploadfile']['name']; $picsize = $_FILES['uploadfile']['size']; if ($picname != "") { if ($picsize > 2014000) { //限制上傳大小 echo '{"status":0,"content":"圖片大小不能超過2M"}'; exit; } $type = strstr($picname, '.'); //限制上傳格式 if ($type != ".gif" && $type != ".jpg" && $type != "png") { echo '{"status":2,"content":"圖片格式不對!"}'; exit; } $rand = rand(100, 999); $pics = uniqid() . $type; //命名圖片名稱 //上傳路徑 $pic_path = "images/". $pics; move_uploaded_file($_FILES['uploadfile']['tmp_name'], $pic_path); } $size = round($picsize/1024,2); //轉換成kb echo '{"status":1,"name":"'.$picname.'","url":"'.$pic_path.'","size":"'.$size.'","content":"上傳成功"}';