异步上载文件时出错

时间:2016-06-22 15:29:18

标签: php html ajax

我正在尝试使用ajax上传文件,如下所示

这是我的HTML代码:

<form id="upload-file" enctype="multipart/form-data" role="form"
   method="POST">
   <input type="file" name="image" id="file-data" />
   <button type="submit" class="btn btn-warning" style="margin-top:10px;">
   <a style="color:#fff;font-family:sans-serif;font-size:15px;">Submit</a>
   </button>
 </form>

jquery代码:

   $("#upload-file").on('submit', function(e){             
     var formURL="fileupload.php";
     $('#message').html('Uploading File...');
     $("#message").css("display","");
     $.ajax(
     {
        url : formURL,
        type: "POST",
        data : new FormData(this),
        cache: false,
        processData:false,
        success:function(data, textStatus, jqXHR) 
        {   
          if (data) 
           {
            console.log(data);
            var obj = JSON.parse(data);
            $("#file-name span").html("");
            $("#file-size span").html("");
            $("#file-type span").html("");
            //$("#file-error").html("");
            $("#file-name span").html(obj['name']);
            $("#file-size span").html(obj['size']);
            $("#file-type span").html(obj['type']);
            //$("#file-error").html(obj['error']);
            $("#file-name").css("display","");
           } 
          },
        });
      });  

php代码:

  <?php
   require('db_connect.php');
   if(isset($_FILES['image'])){
  //$errors= array();
  $file['name'] = $_FILES['image']['name'];
  //echo $file['name'];
  $file_size =$_FILES['image']['size'];
  $file['size'] = $file_size/1000;
  $file_tmp =$_FILES['image']['tmp_name'];
  $file['type']=$_FILES['image']['type'];
  $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));

  $expensions= array("pdf");

  if(in_array($file_ext,$expensions)=== false){
     $file['error']="extension not allowed, please choose a pdf file.";
  }

  if($file_size > 2097152){
     $file['error']='File size must be excately 2 MB';
 }

  if(empty($errors)==true){
     move_uploaded_file($file_tmp,"fileoploaded/".$file_name);
  }
  else{
     $file['error'] = "File could'nt be updates";
  }
}
 $data = json_encode($file, true);
 //echo "done!";
 echo  $data;
 ?>

但是我收到了以下错误:

<b>Warning</b>:  Unknown: Input variables exceeded 1000. 
    To increase the limit change max_input_vars in php.ini. in 
   <b>Unknown</b> on line <b>0</b>

在大数据的情况下,我可以将max_input_vars更改为更高的值    在哪里我可以猜测数据,但不是用户上传的文件,    有没有其他方法来解决这个问题而不改变    php.ini中的max_input_vars?

1 个答案:

答案 0 :(得分:1)

您需要在contentType: false参数中添加$.ajax。 否则jquery将设置它的默认contentType(默认为application/x-www-form-urlencoded,其中包含二进制数据,它将文件拆分为十亿个单独的部分。)