1. 程式人生 > >jQuery easyui-filebox+ajax+PHP實現檔案上傳並恢復備份

jQuery easyui-filebox+ajax+PHP實現檔案上傳並恢復備份

   最近開發一個數據備份恢復的功能,該專案基於PHP+Mysql+Apache的架構,因此這個功能用easyui-filebox+ajax+PHP實現。
   1.首先HTML部分:
<form id="importFileForm" method="post" enctype="multipart/form-data">
            <div style="margin-bottom:20px">
                <div>選擇Tar包:</div>
                <input id="fileupload"
class="easyui-filebox" name="mypic" data-options="prompt:'Choose file...'" style="width:100%">
</div> <div> <a href="#" class="easyui-linkbutton" onclick="importFileAndRestore()" style="width:100%">RestoreBackup</a
>
</div> <div><label id="fileName"></label></div> <div><label id="uploadInfo"></label></div> </form>
   2.js部分:
//上傳並恢復備份
function importFileAndRestore() {
    //獲取上傳檔案控制元件內容。根據實際情況,easyui-filebox把DOC打亂了,生成filebox_file_id_X這個id標記要上傳的檔案,此控制元件可以上傳多個檔案,因此一個file,X值為1;兩個X值為1,2;以此類推; 
var file = document.getElementById('filebox_file_id_1').files[0]; //判斷控制元件中是否存在檔案內容,如果不存在,彈出提示資訊,阻止進一步操作 if (file == null) { alert('錯誤,請選擇檔案'); return; } //獲取檔名稱 var fileName = file.name; //獲取檔案型別名稱 var file_typename = fileName.substring(fileName.lastIndexOf('.'), fileName.length); //這裡限定上傳檔案檔案型別必須為.gz,如果檔案型別不符,提示錯誤資訊 if (file_typename == '.gz') { //計算檔案大小 var fileSize = 0; //如果檔案大小大於1024位元組X1024位元組,則顯示檔案大小單位為MB,否則為KB if (file.size > 1024 * 1024) { fileSize = Math.round(file.size * 100 / (1024 * 1024)) / 100; if (fileSize > 100) { alert('錯誤,檔案超過100MB,禁止上傳!'); return; } fileSize = fileSize.toString() + 'MB'; } else { fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB'; } //獲取form資料 var formData = new FormData($("#importFileForm")[0]); //將form資料傳遞給後臺處理。contentType必須設定為false,否則chrome和firefox不相容 $.ajax({ url: '../../php/upload_backup.php', type: 'POST', data: formData, dataType: 'json', async: false, cache: false, contentType: , processData: false, success: function (data) { //上傳成功後將控制元件內容清空,並顯示上傳成功資訊 document.getElementById('fileupload').value = null; if (parseInt(data) == 0) { alert("你選擇的檔案格式不正確!"); $('#upload_win').window('close'); } else if (parseInt(data) == 1) { alert("檔案上傳失敗!"); $('#upload_win').window('close'); } else { for (var p in data) { for (var pp in data[p]) { var table_name = (pp.split('.'))[0]; //先清空要恢復的表 var clear_table = { action: "clear" + table_name }; $.ajax({ url: '../../php/client.php', type: "POST", dataType: 'json', data: { strRequest: JSON.stringify(clear_table) }, success: function (obj) { } }) //恢復備份 var restore_table = { action: "add" + table_name, data: JSON.parse(data[p][pp]) }; $.ajax({ url: '../../php/client.php', type: "POST", dataType: 'json', data: { strRequest: JSON.stringify(restore_table) }, success: function (obj) { } }) } } alert("恢復備份成功!"); $('#upload_win').window('close'); } }, error: function (returnInfo) { //上傳失敗時顯示上傳失敗資訊 document.getElementById('uploadInfo').innerHTML = "<span style='color:Red'>" + returnInfo + "</span>"; } }); } else { //將錯誤資訊顯示在前端label文字中 document.getElementById('fileName').innerHTML = "<span style='color:Red'>錯誤提示:上傳檔案應該是.tar.gz字尾而不應該是" + file_typename + ",請重新選擇檔案</span>" } }
   3.PHP部分:
<?php
    //通過$_FILES讀取easyui-filebox控制元件的檔名
    $picname = $_FILES['mypic']['name']; 
    if ($picname != "") {  
    //檔案格式可以在js裡判斷,也可以在PHP中判斷;
        //$type = strstr($picname, '.'); //限制上傳格式 
        //if ($type != ".tar.gz") { 
         //   echo 0; //0代表檔案格式不對;
         //   exit; 
        //} 

        //上傳路徑 
        $pic_path = "/var/www/html/upload/". $picname; 
        if(move_uploaded_file($_FILES['mypic']['tmp_name'], $pic_path)){//返回值1,代表檔案上傳成功;
            //解壓檔案
            shell_exec('cd /var/www/html/upload;tar zxvf '.$picname);
            $files_josn=shell_exec("cd /var/www/html/upload/backup;ls *.json");

            $files_nameArray=array();
            $token = strtok($files_josn, "\n");
            while ($token != false)
           {
                array_push($files_nameArray, $token);
                $token = strtok("\n");
            }
            //讀取備份的內容
            $contents=array();
            for($i=0;$i<count($files_nameArray);$i++){
                $temp=$files_nameArray[$i];
                $content=array();
                                 $content[$temp]=file_get_contents("/var/www/html/upload/backup/".$files_nameArray[$i]);
                array_push($contents,$content);
            }
            echo json_encode($contents);
        }else{
            echo 1;//1代表檔案上傳失敗
        }    
    } 
?>