PHP上传,解压缩和进度条

问题描述:

我需要帮助,为我的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."; 
    } 
} 
?> 

你可以做一些修改,以适应,但这个工程相当好,如果你想一个进度条。你可以添加更多的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; 
} 

据我所知,你将不得不使用JavaScript来做到这一点。通过AJAX调用发布数据并初始化进度条。随着时间的推移动画,使酒吧“填补”。

最终,AJAX调用将完成并将发回一个响应,完成调用后您可以完成动画。这就是我假设大多数进度条都会工作的原因,因为他们通常会上升,然后停止大约99%,直到帖子返回“完成状态”。

在任何情况下,你都会有一个进度条,例如<div>,其宽度随着时间的推移会增加,或者数字会上升等等,并且您可以使用JavaScript来设置动画效果和/或jQuery。希望这会让你开始朝正确的方向发展。

编辑

下面是使用AJAX的教程链接描述文件上传到服务器的必要步骤:Uploading Files with AJAX

+0

谢谢您的回复,我一定会给这一个去! – user3082570 2014-10-31 14:15:14