頭像上傳 方法一:from表單 方法二:ajax
阿新 • • 發佈:2018-07-01
AD AS error 移動 tar 屬性 win 類型 pos
方法一:from表單
html
設置form表單,內包含頭像預覽div,內包含上傳文件input
設置iframe用來調用函數傳參路徑
<!--表單提交成功後不跳轉處理頁面,而是將處理數據返回給iframe框架,用target屬性,屬性值為框架的name--> <form id="form1" action="chuli.php" method="post" enctype="multipart/form-data" target="sc"> <!--頭像顯示位置--> <div id="show"> <!--刪除了提交按鈕,設置當路徑改變時執行表單提交,腳本語句可以直接寫在函數後--> <!--文件上傳設為透明,充滿整個div,使得點擊頭像框時可以執行瀏覽圖片--> <input type="file" id="file" name="file" onchange="$(‘#form1‘).submit();"/> </div> </form> <!--框架--> <iframe id="sc" name="sc"></iframe>
js
function showImage(path){ $(‘#show‘).css(‘background-image‘,‘url(‘+path+‘)‘); } //onchange後面的調用函數 // function aa(){ // $(‘#form1‘).submit(); // }
php
//文件名 $name = $_FILES[‘file‘][‘name‘]; //文件類型 $type= $_FILES[‘file‘][‘type‘]; //臨時路徑 $tmp_name = $_FILES[‘file‘][‘tmp_name‘]; //錯誤代碼 $error = $_FILES[‘file‘][‘error‘]; //文件大小 $size = $_FILES[‘file‘][‘size‘]; //如果文件名不為空則向下判斷 if(!empty($name)){ //如果錯誤等於0 則沒有錯誤,往下判斷 if($error == 0){ //文件類型為圖片時 if($type == ‘image/png‘){ //文件大小小於100000b if($size <=100000){ //如果不存在文件夾upfile if(!is_dir("./image/")){ //創建文件夾upfile mkdir("./image/"); } //定義時間戳 $time = time(); //文件路徑設置為 $path = "./image/".$time.$name; //如果文件移動成功 if(move_uploaded_file($tmp_name,$path)){ //返回給頁面的數據 //因為iframe為頁面的子元素,所以.parent為頁面,.showImage為其中的函數,$path為傳參路徑 echo "<script>window.parent.showImage(‘{$path}‘)</script>"; }else{ echo‘上傳失敗‘; } //否則則輸出文件過大 }else{ echo‘文件過大‘; } //若不是圖片則輸出格式不對 }else{ echo‘文件格式不對‘; } //錯誤代號,輸出各種錯誤意思。 }else{ switch($error){ case ‘1‘: echo ‘上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值‘; break; case ‘2‘: echo ‘傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。‘; break; case ‘3‘: echo ‘文件只有部分被上傳‘; break; case ‘4‘: echo ‘沒有文件被上傳‘; break; } } //文件名為空,則輸出文件為空 }else{ echo ‘文件為空‘; }
方法二:ajax
html
<!--頭像框,設置寬高,背景圖,背景大小100%--> <div id="showing"> <!--上傳文件,設置寬高100%,透明--> <input type="file" id="file" name="file" onchange="upload()" /> </div> <!--<input type="button" value="上傳" onclick="upload()" />-->
js
function upload(){ //拿到文件名 var path = $(‘#file‘).val(); //如果文件名中的換行空格等,為空則提示要選擇文件 if($.trim(path) == ""){ alert(‘請選擇要選擇的文件‘); return; } $.ajaxFileUpload({ url:‘chuli.php‘, type:‘post‘, secureuri:false,//是否啟用安全提交,默認false fileElementId:‘file‘,//上傳文件的id,name屬性名 dataType:‘text‘, data:{}, success:function(data){//console.log(data); $(‘#showing‘).css(‘background-image‘,‘url(‘+data+‘)‘); } }); }
php與上面相同,只是返回值只為文件路徑。
$name = $_FILES[‘file‘][‘name‘]; $type = $_FILES[‘file‘][‘type‘]; $tmp_name = $_FILES[‘file‘][‘tmp_name‘]; $error = $_FILES[‘file‘][‘error‘]; $size = $_FILES[‘file‘][‘size‘]; if(!empty($name)){ if($error == 0){ if($type == ‘image/png‘){ if($size <=100000){ if(!is_dir("./image/")){ mkdir("./image/"); } $time = time(); $path = "./image/".$time.$name; if(move_uploaded_file($tmp_name,$path)){ echo $path; }else{ echo‘上傳失敗‘; } } } } }
trim() 函數移除字符串兩側的空白字符或其他預定義字符。
- "\0" - NULL
- "\t" - 制表符
- "\n" - 換行
- "\x0B" - 垂直制表符
- "\r" - 回車
- " " - 空格
頭像上傳 方法一:from表單 方法二:ajax