喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

$5.95 Web Hosting     

上一主题 下一主题
     
标题: [问题] 有关Ajax 和 APC 库的大文件上传问题  
 
tsgx8848
中级会员
Rank: 3Rank: 3
中级会员


UID 30764
精华 0
积分 453
帖子 436
金钱 453 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2004-8-26
来自 广州
状态 离线
[广告]: 代充Paypal帐号美元
有关Ajax 和 APC 库的大文件上传问题

我想用普通方法实现上传大文件,然后用Ajax结合APC来获取上传文件的总大小和当前已上传完的大小来制作上传的时度条。其中有关APC的代码在getprogress.php中,现在的问题是文件上传没问题,但进度条达不到效果,
大家帮忙看看

progress.php文件,直接的上传界面

<?php
   
//$id = md5(uniqid(rand(), true));
   
$id uniqid("");
?>
<html>
<head><title>Upload Example</title></head>
<body>

<script language="javascript">

var xmlHttp;
var proNum=0;
var loop=0;

function createXHR(){
    var xmlHttp;  
    if(window.ActiveXObject)
    {
        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");//Microsoft.XMLHTTP
    }
    else if (window.XMLHttpRequest)
    {
        xmlHttp = new XMLHttpRequest();
    }
    return xmlHttp;
}

xmlHttp=createXHR();

function sendURL() {
    var url="http://192.168.1.156/newUpTest/getprogress.php?progress_key=<?php echo $id;?>";
    xmlHttp.onreadystatechange = doHttpReadyStateChange;
    xmlHttp.open("GET",url,false);
    xmlHttp.send("progress_key=<?php echo $id;?>");

}

function doHttpReadyStateChange() {
    
   if (xmlHttp.readyState == 4){
        
        proNum=parseInt(xmlHttp.responseText);
        document.getElementById("progressinner").style.width = proNum+"%";
        document.getElementById("showNum").innerHTML = proNum+"%";
        if ( proNum < 100){
            setTimeout("getProgress()", 100);
        }
        
    }
}

function getProgress(){
    loop++;
    document.getElementById("showNum2").innerHTML = loop;
    sendURL();

}

function startProgress(){
    document.getElementById("progressouter").style.display="block";
    setTimeout("getProgress()", 100);
}

</script>

<iframe id="theframe" name="theframe" 
        src="upload.php?id=<?php echo($id); ?>
        style="border: none; height: 100px; width: 400px;" > 
</iframe>
<br/><br/>

<div id="progressouter" style=
   "width: 500px; height: 20px; border: 6px solid red; display:none;">
   <div id="progressinner" style=
       "position: relative; height: 20px; background-color: purple; width: 0%; ">
   </div>
</div><div id='showNum'></div><br>
<div id='showNum2'></div>
</body>
</html>
upload.php 页面上传控件文件,内嵌到progress.php中

<?php
   $id 
$_GET['id'];
?>

<form enctype="multipart/form-data" id="upload_form" 
      action="target.php" method="POST">

<input type="hidden" name="APC_UPLOAD_PROGRESS" 
       id="progress_key"  value="<?php echo $id?>"/>

<input type="file" id="test_file" name="test_file"/><br/>

<input onclick="window.parent.startProgress(); return true;"
 type="submit" value="Upload!"/>

</form>
target.php

<?php  

if($_SERVER['REQUEST_METHOD']=='POST') {
  
move_uploaded_file($_FILES["test_file"]["tmp_name"], 
  
"D:\WebSource\newUpTest\UploadTemp\" . $_FILES["test_file"]["name"]);
  echo "
<p>File uploaded.  Thank you!</p>";
}

?>
getprogress.php 有关APC读取临时的上传文件大小的文件,此文件由progress.php里的Ajax代码调用

<?php
session_start
();
if(isset(
$_GET['progress_key'])) {

  
$status apc_fetch('upload_'.$_GET['progress_key']);
  echo (
$status['current']/$status['total'])*100;

}
?>
另附件有php_apc.dll 扩展库文件及相关的 php.ini 配置文件。
本人环境 : Windows XP+Apache2.2+PHP 5.2.3


 附件: 您所在的用户组无法下载或查看附件



本人QQ:253635538
欢迎交流
2007-7-5 09:08 AM#1
查看资料  访问主页  发短消息  QQ  顶部
 
tsgx8848
中级会员
Rank: 3Rank: 3
中级会员


UID 30764
精华 0
积分 453
帖子 436
金钱 453 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2004-8-26
来自 广州
状态 离线
[广告]: 代充Paypal帐号美元
请问还有什么其它更好的方法来实现大文件上传的进度条的?
 Flash?




本人QQ:253635538
欢迎交流
2007-7-5 10:54 AM#2
查看资料  访问主页  发短消息  QQ  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.024960 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP