Ajax+php带进度条上传文件
程序需要php的apc模块的支持,关键点就是在上传的form里添加一个hidden的inpu标签,里面要有name为
APC_UPLOAD_PROGRESS的属性,value值为一个随机数一遍多个人上传。
?
apc模块的安装方法是,下载php_apc.dll放到ext文件夹下,在php.ini文件里添加
upload_max_filesize =100M
????? apc.rfc1867 = on
????? apc.max_file_size = 100M
extension=php_apc.dll
然后测试配置是否成功:
if(apc_fetch)
{echo "apc is working"}
else{echo "apc is not supported!";}
?
?
?
运行效果截图
下面是源码
1 前台页面:
?
2后台upload.php文件代码:
<?php/* * Created on 2010-4-16 * * To change the template for this generated file go to * Window - Preferences - PHPeclipse - PHP - Code Templates */ if ($_SERVER['REQUEST_METHOD'] == 'POST'){$myfile=$_FILES['upfile'];echo $myfile['size'];echo $myfile['size'];print_r($myfile);$tempf=$myfile['tmp_name'];$name=$myfile['name'];move_uploaded_file($tempf,'up/'.$name);}if(isset($_GET['key'])){//header('Content-Type:application/json; charset=utf-8' ) ; // Retrieve the status using the getStatus() function below //echo json_encode(getStatusAPC()); echo json_encode(getStatusAPC());}function getStatusAPC(){$response=false;if($status = apc_fetch('upload_'.$_GET['key'])) {$response=apc_fetch('upload_'.$_GET['key']);}return $response;}?>?问题总结:
1,使用setTimeout嵌套和setInterval有区别,用前者效果较好,用后者的话由于请求和返回的时间比较随机,时间间隔把握不好的话,程序会比较混乱,结果往往不正确。
2.发送Ajax请求时每次都要重新实例化xmlhttprequest对象而不能用上次实例化的,否则程序在ie下无法执行,在火狐下可以运行
?
?
1 楼 menglongmomo 2012-03-02 为什么我试了,能够上传成功,但是没有绿色的条出来啊,只有一个红的