在PHP網站開發中,文件上傳功能時常用到,之前我已介紹過 如何利用PHP實現文件上傳功能 。 隨著WEB技術的發展,用戶體驗成為衡量網站成功與否的關鍵,今天和大家分享如何在PHP中利用Jquery實現Ajax方式文件上傳功能的例子,其中使用到了Jquery插件Ajaxupload,其可以實現單個文件和多文件上傳功能。

AjaxUpload

  Jquery插件AjaxUpload實現文件上傳功能時無需創建form表單,即可實現Ajax方式的文件上傳,當然根據需要也可以創建form表單。

準備工作

1、下載 Jquery開發包 和文件上傳插件 AjaxUpload 。

2、創建uploadfile.html,並引入Jquery開發包和AjaxUpload插件

1
2
< script src "js/jquery-1.3.js" ></ script >
< script src "js/ajaxupload.3.5.js" ></ script >

3、根據Jquery插件AjaxUpload的需要,創建一個觸發Ajax文件上傳功能的DIV

1
2
3
4
5
6
ul > 
    li id "example" > 
    div id "upload_button" > 文件上傳 div >
    p > 已上傳的文件列表: p > 
            ol class "files" >< ol >
ul >

註釋 :由下面的代碼我們可以看到Jquery插件AjaxUpload是根據upload_button這個DIV觸發文件上傳功能。 

前台JS代碼

  在代碼中我設置了開關,根據需要可以匹配上傳文件類型,同時也可以設置是以Ajax方式實現單個文件上傳還是多個文件上傳。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
( document ) . ready function {
    var button = $ '#upload_button' , interval ;
    var fileType "all" , fileNum "one" ; 
    new AjaxUpload ( button {
        action 'do/uploadfile.php' ,
        /*data:{
            'buttoninfo':button.text()
        },*/

        name 'userfile' ,
        onSubmit function ( file , ext {
            if ( fileType == "pic" )
            {
                if ( ext && /^(jpg|png|jpeg|gif)$/ . test ( ext {
                    this . setData {
                        'info' '文件類型為圖片'
                    ;
                else {
                    $ '<li></li>' ) . appendTo '#example .files' ) . text '非圖片類型文件,請重傳' ;
                    return false ;               
                }
            }
                        
            button. text '文件上傳中' ;
            
            if ( fileNum == 'one' )
                this . disable ;
            
            interval = window. setInterval function {
                var text = button. text ;
                if ( text. length 14 {
                    button. text ( text '.' ;                    
                else {
                    button. text '文件上傳中' ;             
                }
            200 ;
        ,
        onComplete function ( file , response {
            if ( response != "success" )
                alert ( response ;
                
            button. text '文件上傳' ;
                        
            window. clearInterval ( interval ;
                        
            this . enable ;
            
            if ( response == "success" ;
                $ '<li></li>' ) . appendTo '#example .files' ) . text ( file ;                  
        }
    ;
 
;

註釋 :
第1行:$(document).ready()函數,Jquery中的函數,類似於window.load,使用這個函數可在DOM載入就緒能夠讀取並操縱時立即調用綁定的函數。

第3行:fileType和fileNum參數代表上傳文件的類型和數量,默認值為可上傳所有類型文件,同一時間只能上傳一個文件,如想上傳圖片文件或同時上傳多個文件,可將這兩個變量值變為pic和more。

第6~8行:POST到服務器的數據,你可以設置靜態值也可以通過Jquery的DOM操作函數獲得一些動態值,比如form表單中INPUT的值等。

第9行:等同於前端

1
input type "file" name "userfile" >

服務器端$_FILES['userfile']

第10~36行:文件上傳前觸發的功能。

第11~21行:圖片文件類型的過濾功能,Jquery setData函數用來設置POST至服務器端的值。

第25~26行:設置同時只上傳一個文件還是多個文件,如果只上傳一個文件,則將觸發按鈕禁掉。 如果要多傳輸幾個文件,請在服務器端PHP文件上傳程序中設置MAXSIZE的值,當然上傳文件的大小限制同時和PHP.INI文件中的設置也有關。

第28~35行:在文件上傳過程中每隔200毫秒動態更新一次按鈕的文字,已實現動態提示的效果。window.setInterval函數用來每隔指定的時間就執行一次內置的函數,交互時間單位為豪秒。

第37~49行:文件上傳功能完成後觸發的功能,根據返回值如果服務器端報錯,則前端通過ALERT方式提示出錯信息。

服務器端PHP文件上傳代碼

  大體上是根據之前介紹的 PHP文件上傳功能代碼實例教程 改編,涉及到的文件上傳大小的設置,出錯信息等說明都已在此文中詳細說明。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
$upload_dir '../file/' ;
$file_path $upload_dir $_FILES 'userfile' 'name' ;
$MAX_SIZE 20000000 ;

echo $_POST 'buttoninfo' ;
if is_dir $upload_dir )
{
    if mkdir $upload_dir )
        echo "文件上傳目錄不存在並且無法創建文件上傳目錄" ;
    if chmod $upload_dir 0755 )
        echo "文件上傳目錄的權限無法設定為可讀可寫" ;
}

if $_FILES 'userfile' 'size' $MAX_SIZE )
    echo "上傳的文件大小超過了規定大小" ;

if $_FILES 'userfile' 'size' == )
    echo "請選擇上傳的文件" ;

if move_uploaded_file $_FILES 'userfile' 'tmp_name' $file_path )
    echo "複製文件失敗,請重新上傳" ; 

switch $_FILES 'userfile' 'error' )
{
    case :
        echo "success" ;
        break ;
    case :
        echo "上傳的文件超過了php.ini中upload_max_filesize選項限制的值" ;
        break ;
    case :
        echo "上傳文件的大小超過了HTML表單中MAX_FILE_SIZE選項指定的值" ;
        break ;
    case :
        echo "文件只有部分被上傳" ;
        break ;
    case :
        echo "沒有文件被上傳" ;
        break ;
}

總結

  基本上前端Ajax文件上傳觸發功能和服務器端PHP文件上傳功能的原型就介紹完畢了,你可以根據自身需要對前後端代碼進行補充,也可以將一些功能獨立出來,比如文件類型、單個文件或者多文件上傳功能。 總的來說Jquery插件AjaxUpload實現文件上傳功能的應用還是比較容易的。

   : PHP網站開發教程-leapsoul.cn 版權所有,轉載時請以鏈接形式註明原始出處及本聲明,謝謝。

--

轉自 http://www.leapsoul.cn/?p=304

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 dizzy03 的頭像
    dizzy03

    碎碎念

    dizzy03 發表在 痞客邦 留言(0) 人氣()