2014-10-31 127 views
1

我需要幫助,爲我的php上傳網站創建一個進度條。我有上傳和exctract部分排序,但我需要進度條的幫助。我不知道該怎麼做。另外,上傳文件的最大尺寸是多少?PHP上傳,解壓縮和進度條

HTML

<?php if($message) echo "<p>$message</p>"; ?> 
<form enctype="multipart/form-data" method="post" action=""> 
<label>Choose file (.zip): <input type="file" name="zip_file" /></label> 
<br /> 
<input type="submit" value="Upload" name="submit" value="Upload" /> 
</form> 

PHP

<?php 
if($_FILES["zip_file"]["name"]) { 
    $filename = $_FILES["zip_file"]["name"]; 
    $source = $_FILES["zip_file"]["tmp_name"]; 
    $type = $_FILES["zip_file"]["type"]; 

    $name = explode(".", $filename); 
    $accepted_types = array(
    'application/zip', 
    'application/x-zip-compressed', 
    'multipart/x-zip', 
    'application/x-compressed');       

    foreach($accepted_types as $mime_type) { 
    if($mime_type == $type) { 
     $okay = true; 
     break; 
    } 
    } 

    $continue = strtolower($name[1]) == 'zip' ? true : false; 
    if(!$continue) { 
    $message = "[...] not a .zip file. Please try again."; 
    } 
    $target_path = "./".$filename; 
    if(move_uploaded_file($source, $target_path)) { 
    $zip = new ZipArchive(); 
    $x = $zip->open($target_path); 
    if ($x === true) { 
     $zip->extractTo("./"); 
     $zip->close(); 

     unlink($target_path); 
    } 
    $message = "Your .zip file was uploaded and unpacked."; 
    } else { 
    $message = "There was a problem with the upload. Please try again."; 
    } 
} 
?> 

回答

1

你可以做一些修改,以適應,但這個工程相當好,如果你想一個進度條。你可以添加更多的eventlisteners,並使其成爲你想要的。我希望這對你來說是一個很好的起點。

function uploadFile(){ 
    var file = document.getElementById("zip_file").files[0]; 
    var formdata = new FormData(); 
    formdata.append("zip_file", file); 
    var ajax = new XMLHttpRequest(); 
    ajax.upload.addEventListener("progress", function(event) { runprogress(event); } , false); 
    ajax.addEventListener("load", function(event) {uploadcomplete(event); }, false); 
    //Target your php file. 
    ajax.open("POST", "upload.php"); 
    ajax.send(formdata); 
} 
function runprogress(event){ 
    //The progress %, you might want to Math.round(percent) 
    var percent = (event.loaded/event.total) * 100; 
} 
function uploadcomplete(event){ 
    //This will = to your php reply. 
    var AjaxReply=event.target.responseText; 
} 
1

據我所知,你將不得不使用JavaScript來做到這一點。通過AJAX調用發佈數據並初始化進度條。隨着時間的推移動畫,使酒吧「填補」。

最終,AJAX調用將完成並將發回一個響應,完成調用後您可以完成動畫。這就是我假設大多數進度條都會工作的原因,因爲他們通常會上升,然後停止大約99%,直到帖子返回「完成狀態」。

在任何情況下,你都會有一個進度條,例如<div>,其寬度隨着時間的推移會增加,或者數字會上升等等,並且您可以使用JavaScript來設置動畫效果和/或jQuery。希望這會讓你開始朝正確的方向發展。

編輯

下面是使用AJAX的教程鏈接描述文件上傳到服務器的必要步驟:Uploading Files with AJAX

+0

謝謝您的回覆,我一定會給這一個去! – user3082570 2014-10-31 14:15:14