博客列表 >文件上传-2018年04月22日22时12分

文件上传-2018年04月22日22时12分

植树青年小江同志的博客
植树青年小江同志的博客原创
2018年04月22日 22:14:37633浏览

屏幕快照 2018-04-22 22.11.48.png


  1. 使用 jQuery 的 ajax api 代1替原生的 xhr 操作

  2. 多文件上传进行遍历

  3. 多文件时 $_FILES['file'] 是数组

实例

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>PHP 文件上传</title>
</head>
<body>
  <form enctype="multipart/form-data"> 
    <!-- 用隐藏域设置允许上传的文件大小,仅考参考 -->
    <input type="hidden" name="MAX_FILE_SIZE" value="542488">
    <fieldset>
      <legend align="center">文件上传</legend>
      <p><strong>选择文件:</strong><input type="file" name="upload" multiple id="files"></p>
    </fieldset>	
    <p align="center"><button type="submit" name="submit" id="submit">上传</button></p>
    <span></span>
  </form>

  <div id="info">

  </div>

<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>

<script type="text/javascript">
$('form').on('submit', function (e) {
  e.preventDefault();
  var formData = new FormData();

  var filesObj = $('#files')[0].files;

  for (let i = 0; i< filesObj.length; i++) {
    formData.append('file[]', filesObj[i]);
  }

  console.log(formData);

  $.ajax({
    url: '<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>',
    type: 'POST',
    processData: false,
    contentType: false,
    data: formData,
    success: function (data) {
      console.log(data);
      $('#info').html(data).children('form').remove();
    }
  })
})
</script>
</body>
</html>

<?php

//检测请求类型是否POST,如果不是应该提示用户类型不对

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  //检测是否有文件被上传
  if (isset($_FILES['file'])) {
    
    $name = $_FILES['file']['name'];
    $tmp_name = $_FILES['file']['tmp_name'];
    $type= $_FILES['file']['type'];
    $error = $_FILES['file']['error'];
    // 检测是否为多文件
      for ($i = 0; $i < count($name); $i++) {
        if (validateType($type[$i])) {
          //将文件先移动到临时目录
          if (move_uploaded_file($tmp_name[$i], "../upload/{$name[$i]}")){
            //上传成功
            echo "图片" . $name[$i] . "上传成功" . '<br>';
				  } 
        } else {
          //提示格式不对
					echo "图片" . $name[$i] . "上传失败" . '<br>';
        }
      }
      //对上传错误进行处理
		
    for ($i = 0; $i < count($error); $i++){
      if ( $error[$i] > 0 ) {
      echo '<p>错误原因是:<strong>';

        switch ($error[$i]) {
          case 1:
            echo '文件超过了php.ini配置中设置的大小';
            break;
          case 2:
            echo '文件超过了表单中常量设置的大小';
            break;
          case 3:
            echo '仅有部分文件被上传';
            break;
          case 4:
            echo '没有文件被上传';
            break;
          case 6:
            echo '没有可用的临时文件夹';
            break;
          case 7:
            echo '磁盘已满,写入失败';
            break;
          case 8:
            echo '上传意外中止';
            break;
          
          default:
            echo '系统未知错误' , $error[$i] ;
            break;
        }
        echo '</strong></p>';
      //保险起见,最好把创建的临时文件删除,当然系统也会在结束会话时自动清空

        
      }
  }
    for ($i = 0; $i < count($tmp_name); $i++) {

      if (file_exists($tmp_name[$i]) && is_file($tmp_name[$i])) {
              unlink($_tmp_name[$i]);
      }
    }
  }
  

    
  
} 

function validateType($fileType)
{
  //设置允许上传的文件类型
  $allow = ['image/jpg', 'image/jpeg', 'image/png'];

  if (in_array($fileType, $allow)) {
    return true;
  }
}

?>

运行实例 »

点击 "运行实例" 按钮查看在线实例


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议