PHP+Ajax無(wú)刷新帶進(jìn)度條圖片上傳示例
項(xiàng)目需求:1.PHP+Ajax無(wú)刷新帶進(jìn)度條圖片上傳,2.帶進(jìn)度條。所需插件:jquery.js,jquery.form.js。
最近在做一個(gè)手機(jī)web項(xiàng)目,需要用到Ajax上傳功圖片能,項(xiàng)目要求PHP無(wú)刷新上傳圖片,并且要帶進(jìn)度條,下面就來(lái)講一下我的實(shí)現(xiàn)方法,先看效果圖
本示例需要使用的是jquery.js,jquery.form.js,demo里面包含有,你可以在文章下方進(jìn)行下載。
第一步,建立前端頁(yè)面index.html
此段是前端展示內(nèi)容,這里需要說(shuō)明的是由于input:file標(biāo)簽顯示不太美觀,所以我把它隱藏了。而使用一個(gè)a標(biāo)簽.uploadbtn來(lái)調(diào)用file標(biāo)簽的click事件,用來(lái)打開(kāi)并選擇文件。
注意:文件上傳時(shí)form的屬性enctype必須設(shè)置為:multipart/form-data
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title>php-ajax無(wú)刷新上傳(帶進(jìn)度條)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="請(qǐng)點(diǎn)擊上傳圖片" 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">點(diǎn)擊上傳文件</a> </div> </body> </html>
第二步,Ajax提交部分
這部份就是Ajax的提交部份,過(guò)程如下:
- 在提交開(kāi)始通過(guò)beforeSend回調(diào)函數(shù)設(shè)置進(jìn)度條顯示出來(lái),進(jìn)度條寬度為0%,進(jìn)度值0%;
- 在上傳過(guò)程中通過(guò)uploadProgress回調(diào)函數(shù)實(shí)時(shí)返回的數(shù)據(jù),更改進(jìn)度條的寬度和進(jìn)度值。
- 在上傳成功后,通過(guò)success回調(diào)函數(shù)輸出上傳為數(shù)據(jù)信息(圖片名稱,大小,地址等)并把圖片輸出到頁(yè)面上預(yù)覽。
- 當(dāng)然如果失敗,有error回調(diào)函數(shù)幫你進(jìn)行高度。
<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', //數(shù)據(jù)格式為json beforeSend: function() { //開(kāi)始上傳 progress.show(); var percentVal = '0%'; progress_bar.width(percentVal); percent.html(percentVal); }, uploadProgress: function(event, position, total, percentComplete) { var percentVal = percentComplete + '%'; //獲得進(jìn)度 progress_bar.width(percentVal); //上傳進(jìn)度條寬度變寬 percent.html(percentVal); //顯示上傳進(jìn)度百分比 }, 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文件上傳,不過(guò)上傳的時(shí)候需要做一些判斷,如文件格式、文件大小等。
注意:我上面ajax返回格式是json,所以在圖片json代碼是一定要正確規(guī)范,否則會(huì)出現(xiàn)上傳不成功的提示。
$picname = $_FILES['uploadfile']['name']; $picsize = $_FILES['uploadfile']['size']; if ($picname != "") { if ($picsize > 2014000) { //限制上傳大小 echo '{"status":0,"content":"圖片大小不能超過(guò)2M"}'; exit; } $type = strstr($picname, '.'); //限制上傳格式 if ($type != ".gif" && $type != ".jpg" && $type != "png") { echo '{"status":2,"content":"圖片格式不對(duì)!"}'; 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); //轉(zhuǎn)換成kb echo '{"status":1,"name":"'.$picname.'","url":"'.$pic_path.'","size":"'.$size.'","content":"上傳成功"}';
demo下載: php-ajax-upload_jb51.rar
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- php 下 html5 XHR2 + FormData + File API 上傳文件操作實(shí)例分析
- PHP使用HTML5 FileApi實(shí)現(xiàn)Ajax上傳文件功能示例
- php+html5實(shí)現(xiàn)無(wú)刷新圖片上傳教程
- 使用PHP和HTML5 FormData實(shí)現(xiàn)無(wú)刷新文件上傳教程
- php+html5+ajax實(shí)現(xiàn)上傳圖片的方法
- php+html5使用FormData對(duì)象提交表單及上傳圖片的方法
- php 使用html5實(shí)現(xiàn)多文件上傳實(shí)例
- PHP 文件上傳進(jìn)度條的兩種實(shí)現(xiàn)方法的代碼
- php實(shí)現(xiàn)簡(jiǎn)單的上傳進(jìn)度條
- php上傳文件并顯示上傳進(jìn)度的方法
- PHP+Ajax實(shí)現(xiàn)上傳文件進(jìn)度條動(dòng)態(tài)顯示進(jìn)度功能
- php 使用html5 XHR2實(shí)現(xiàn)上傳文件與進(jìn)度顯示功能示例
相關(guān)文章
PHP面向?qū)ο笾I(lǐng)域模型+數(shù)據(jù)映射器實(shí)例(分析)
下面小編就為大家?guī)?lái)一篇PHP面向?qū)ο笾I(lǐng)域模型+數(shù)據(jù)映射器實(shí)例(分析)。小編覺(jué)得挺不錯(cuò)的?,F(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06針對(duì)多用戶實(shí)現(xiàn)頭像上傳功能PHP代碼 適用于登陸頁(yè)面制作
這篇文章主要為大家詳細(xì)介紹了針對(duì)多用戶實(shí)現(xiàn)頭像上傳功能PHP代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08laravel框架上傳圖片實(shí)現(xiàn)實(shí)時(shí)預(yù)覽功能
今天小編就為大家分享一篇laravel框架上傳圖片實(shí)現(xiàn)實(shí)時(shí)預(yù)覽功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10laravel實(shí)現(xiàn)查詢最后執(zhí)行的一條sql語(yǔ)句的方法
今天小編就為大家分享一篇laravel實(shí)現(xiàn)查詢最后執(zhí)行的一條sql語(yǔ)句的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10thinkphp中html:list標(biāo)簽傳遞多個(gè)參數(shù)實(shí)例
這篇文章主要介紹了thinkphp中html:list標(biāo)簽傳遞多個(gè)參數(shù)的解決方法,在處理參數(shù)傳遞的情況非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10