2016-06-22 5 views
1

Я пытаюсь загрузить файл, используя 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 в какой-то более высокое значение в случае больших объемов данных , где я могу угадать данные раньше, но не в случае закачиваемого файла пользователем, есть ли другой способ для решения этой проблемы без изменения max_input_vars в php.ini?

+0

Пожалуйста, укажите ваш PHP-код. – 4castle

+0

Возможно, перезапустите свой сервер, чтобы отразить изменение php.ini? –

+0

Я не хочу менять файл php.ini. – flamelite

ответ

1

Необходимо указать contentType: false в параметрах $.ajax. В противном случае jquery установит значение по умолчанию contentType (по умолчанию application/x-www-form-urlencoded, с бинарными данными в теле будет разбит файл на миллиард отдельных частей).