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
谢谢您的回复,我一定会给这一个去! – user3082570 2014-10-31 14:15:14