php 폼 파일 iframe 비동기 업로드 인 스 턴 스 설명

본 논문 의 사례 는 phop 폼 파일 iframe 비동기 로 올 린 구체 적 인 코드 를 공유 하여 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
1.폼 에 iframe 요 소 를 배치 합 니 다.
2.파일 업로드 컨트롤 내용 이 변 했 을 때 JS 설정 폼 의 action 을 실행 하여 파일 업로드 의 img 처리upload_process.php 파일 을 사용 하고 폼 의 target 을 iframe 으로 설정 하여 iframe 을 서버 에 제출 하여 파일 을 업로드 하도록 합 니 다.
3.img_upload_process.php 에서 파일 업로드 에 성공 하면 저 장 된 파일 경 로 를 폼 에 숨겨 진 도 메 인 에 전송 합 니 다.
4.폼 제출 버튼 을 눌 렀 을 때 JS 는 폼 액 션 을 폼 데 이 터 를 받 는 form 로 설정 합 니 다.process.php 파일,폼 의 target 설정self。
폼:asynuplaod.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>      </title>
</head>
<body>
<!-- application/x-www-form-urlencoded        -->
<!-- multipart/form-data         ,     post          ,           -->
<form action="" method="post" enctype="multipart/form-data">
    : <input type="text" name="username" /><br /> 
     : <input type="file" id="avator" name="avator" onchange="startUpload(this.form)" />

 <iframe frameborder='0' width='0' height='0' name="uploadframe"></iframe> 
 <input type="hidden" id="save_path" name="save_path" />
 <span id="loading"></span> <br /> 
 <img width='100' height='100' id='uploaded_img' /> <br />
 <input type="submit" name="submitted" value="  " onclick="formSubmit(this.form)" />

</form>

<script>

function startUpload(formObj){
  document.getElementById('loading').innerHTML = '   ...'; 
  formObj.action = 'img_upload_process.php'; 
  formObj.target = 'uploadframe'; 
  formObj.submit(); 
}


function formSubmit(formObj) {
 formObj.action = 'form_process.php'; 
 formObj.target = '_self';

 //        ,      
 var fileObj = document.getElementById('avator') ;

 // for IE, Opera, Safari, Chrome
 if (fileObj.outerHTML) {
  fileObj.outerHTML = fileObj.outerHTML;
 } else { // FF(  3.5)
  fileObj.value = "";
 }

 formObj.submit(); 
}

</script>

</body>
</html>

파일 업로드 처리:imgupload_process.php

<?php
include 'Upload.class.php';

$file = $_FILES['avator'];
$upload = new Upload();//       


if($save_path = $upload->up($file)){//    
 echo <<<STR
 <script> 
  window.parent.document.getElementById('uploaded_img').src = "$save_path";
  window.parent.document.getElementById('loading').innerHTML = '    '; 
  window.parent.document.getElementById('save_path').value = "$save_path"; 
 </script>
STR;

}else{
 $error = $upload->error();
 echo <<<STR
 <script>
  window.parent.document.getElementById('uploaded_img').src = "";
  window.parent.document.getElementById('loading').innerHTML = "    : $error";
 </script>
STR;

}

파일 업로드 도구 클래스:Upload.class.php

<?php
class Upload{
 private $path; //      
 private $max_size; //        
 private $errno; //     
 private $mime = array('image/jpeg','image/png','image/gif');//         

 /**
  *     ,
  * @access public
  * @param $path string      
  */
 public function __construct($path = './' ){
  $this->path = $path;
  $this->max_size = 1000000;
 }

 /**
  *        ,       
  * @access public
  * @param $file array            
  * @return mixed           ,    false
  */
 public function up($file){
  //          HTTP POST   ,      
  /*
  if (! is_uploaded_file($file['tmp_name'])) {
   $this->errno = 5; //        5,      
   return false;
  }
  */

  //                  
  if ($file['error'] == 0) {
   #           ,         
   //      
   if (!in_array($file['type'], $this->mime)) {
    #     
    $this->errno = -1; 
    return false;
   }

   //      
   if ($file['size'] > $this->max_size) {
    #                
    $this->errno = -2;
    return false;
   }

   //           
   $sub_path = date('Ymd').'/';
   if (!is_dir($this->path . $sub_path)) {
    #       ,   
    mkdir($this->path . $sub_path);
   }

   //     ,      +     +    
   $file_name = date('YmdHis').uniqid().strrchr($file['name'], '.');

   //     ,    
   if (move_uploaded_file($file['tmp_name'], $this->path . $sub_path . $file_name)) {
    #     
    return $sub_path . $file_name;
   } else {
    #     
    $this->errno = -3;
    return false;
   }

  } else {
   #           ,           
   $this->errno = $file['error'];
   return false;
  }

 }

 /**
  *        
  * @access public
  * @param $file array            ,       
  * @return array                , ?             
  */
 public function multiUp($files){
  //       ,               , $_FILES['userfile']['name'][0],$_FILES['userfile']['name'][1]
  //          ,           ,    up    
  foreach ($files['name'] as $key => $value) {
   # code...
   $file['name'] = $files['name'][$key];
   $file['type'] = $files['type'][$key];
   $file['tmp_name'] = $files['tmp_name'][$key];
   $file['error'] = $files['error'][$key];
   $file['size'] = $files['size'][$key];
   //  up  ,    
   $filename[] = $this->up($file);
  }
  return $filename;
 }

 /**
  *       ,              
  * @access public
  * @return string       
  */
 public function error(){
  switch ($this->errno) {
   case -1:
    return '         ,        '.implode(',', $this->mime);
    break;
   case -2:
    return '           ,      '. $this->max_size;
    break;
   case -3:
    return '      ';
    break;
   case 1:
    return '         php.ini   upload_max_filesize       ,    '.ini_get('upload_max_filesize');
    break;
   case 2:
    return '           HTML     MAX_FILE_SIZE       ,    ' . $_POST['MAX_FILE_SIZE'];
    break;
   case 3:
    return '         ';
    break;
   case 4:
    return '       ';
    break;
   case 5:
    return '    ';
    break;
   case 6:
    return '        ';
    break;
   case 7:
    return '           ';
    break;
   default:
    return '    ,    ';
    break;
  }
 }
}

처리 폼 제출:formprocess.php

<?php
var_dump($_REQUEST);
var_dump($_FILES);


폼 제출 단 추 를 누 르 면 결과:
这里写图片描述
코드 다운로드:php 폼 파일 iframe 비동기 업로드
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기