php+ajax上传文件

直接上源代码


html页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" >
<meta name="description" content=""/>
<meta name="keywords" content=""/>
<title>ajax上传文件</title>
<script type="text/javascript">
//加载提交事件给from设置提交事件
window.οnlοad=function(){
//编写出错----注意getElementsByTagName和getElementsByName的区别
//报错:Uncaught TypeError:不确定性无法设置属性“OnSubmit”在window.onload
var fm=document.getElementsByTagName('form')[0];

fm.οnsubmit=function(evt){
//1、收集信息--普通表单信息和文件信息
var fd=new FormData(fm);//代表事件的元素节点对象

//2、ajax传递表单信息到服务器
var xhr=new XMLHttpRequest();//传递数据
xhr.onreadystatechange=function(){
//判断
if(xhr.readyState==4){
alert(xhr.responseText);//打印传输的信息
}
}
xhr.open('POST','./05.php');//数据传输格式 ,服务器端
xhr.send(fd);//发送

//阻止事件流
evt.preventDefault();//阻止浏览器跳转

}

}

</script>
</head>
<body>
<h2>ajax无刷新上传文件</h2>
<form action="./05.php">
<p>姓名: <input type="text" name="username"/></p>
<p>密码: <input type="password" name="userpwd"  /></p>
<p>邮箱: <input type="text" name="useremail"  /></p>
<p>附件: <input type="file" name="userpic"  /></p>
<input type="submit" value="提交"/>
</form>
</body>
</html>




php页面

<?php
//解决页面中文提示乱码情况
header("Content-type:text/html;charset=UTF-8");
//测试--打印出收集传输的信息
//echo "post:";
//print_r($_POST);

//echo "FILES:";
//print_r($_FILES);


//判断附件是否有问题
//附件的存储位置和附件的名字--存储位置-->uploads文件下以用户名命名的文件夹
$path = 'uploads/' . $_POST['username'] . '/';


//最大文件大小20M
$maxSize = 20971520;
//允许上传的文件类型
$allowExt = array('jpeg', 'jpg', 'JPG', 'png', 'gif', 'wbmp', 'doc', 'docx', 'zip', 'rar', 'pdf');
//如果没有文件夹,系统自己创建一个新的文件夹
if ($_FILES['userpic']['error'] == 0) {
if (!file_exists($path)) {
mkdir($path, 0777, TRUE);
chmod($path, 0777);
}
if ($_FILES['userpic']['size'] > $maxSize) {
exit('上传文件大于20M限制,请检查!');
}
$ext = pathinfo($_FILES['userpic']['name'], PATHINFO_EXTENSION);
if (!in_array($ext, $allowExt)) {
exit('只允许图片文件,word文件,压缩文件,pdf文件,请检查!');
}
//判断文件是否通过HTTP POST方式上传
if (!is_uploaded_file($_FILES['userpic']['tmp_name'])) {
exit('文件不是通过HTTP POST方式上传,请检查!');
}
}
//保证文件原名存储
$name = $_FILES['userpic']['name'];


//解决上传文件中文文件时出现报错情况
$name = iconv('utf-8','gb2312',$_FILES['userpic']['name']);
//存储真实名
$truename = $path . $name;


//移动临时位置到真实位置move_uploaded_file
if (move_uploaded_file($_FILES['userpic']['tmp_name'],$truename)) {
echo "上传成功";
} else {
//匹配错误信息
switch ($_FILES['userpic']['error']) {
case 1 :
echo '上传文件超出了php配置文件中upload_maxfilesize选项的值';
break;
case 2 :
echo '文件超出了表单MAX_FILE_SIZE限制的大小';
break;
case 3 :
echo '文件部分被上传';
break;
case 4 :
echo '没有选择上传的文件';
break;
case 6 :
echo '没有找到临时目录';
break;
case 7 :
case 8 :
echo '系统错误!';
break;
}
//echo "上传失败";
}
?>

本人已测试成功,请参考。



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值