1. 程式人生 > >php+ajax上傳檔案

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.onload=function(){
//編寫出錯----注意getElementsByTagName和getElementsByName的區別
//報錯:Uncaught TypeError:不確定性無法設定屬性“OnSubmit”在window.onload
var fm=document.getElementsByTagName('form')[0];

fm.onsubmit=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 "上傳失敗";
}
?>

本人已測試成功,請參考。