ajax实现无刷新上传附件并且显示进度条的实例

时间:2022-10-11 07:24:39

首先:得把php.ini中的post_max_size和upload_max_filesize改成200M或更大(进度条好看效果,默认是2M)

html和js代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script>
window.onload=function(){
var fm=document.getElementsByTagName('form')[0];
fm.onsubmit=function(evt){//表单事件
var fd=new FormData(fm);//接受表单数据
var xhr=new XMLHttpRequest();
xhr.upload.onprogress=function(evt){//onprogress事件每0.1秒感应一次
//console.log(evt);
var loaded=evt.loaded;//已经上传的附件大小
var total=evt.total;//附件的总大小
var per=Math.floor((loaded/total)*100)+'%';
document.getElementById('son').style.width=per;
document.getElementById('son').innerHTML=per;
}
xhr.onreadystatechange=function(){//ajax返回状态
if (xhr.readyState==4) {
alert(xhr.responseText);
}
}
xhr.open('post','upload.php');//发送ajax方式和路径
xhr.send(fd);//发生表单数据
evt.preventDefault();//阻止浏览器跳转
}
}
</script>
<style>
#pat{
width:400px;
height:5px;
border:1px solid blue;
}
#son{
width:0;
height:100%;
background-color:yellow;
}
</style>
</head>
<body>
<form action="upload.php" >
用户名:<input type="text" name='username'><br>
<input type="file" name='file'><br>
<input type="submit" value='提交'>
<br><br>
<div id='pat'><div id='son'></div></div>
</body>
</html>

php代码:

<?php
if ($_FILES['file']['error']>0) {
exit('上传异常');
}
$path='./upload/';
$name=mt_rand('000','999').$_FILES['file']['name'];//在名字前加上三位随机数,这样能多次上传同一文件
$truename=$path.$name;
$truename=iconv('UTF-8','gb2312',$truename);//转码,使得能够上传中文名称附件
if (move_uploaded_file($_FILES['file']['tmp_name'],$truename)) {//$_FILES['file']['tmp_name']为临时存放目录
echo 'upload success';
}else{
echo 'upload error';
}
?>

效果图:

ajax实现无刷新上传附件并且显示进度条的实例