Codeigniter: ошибка 400 при отправке файла на сервер с помощью Ajax - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь отправить файл (тип входного файла) на сервер php, используя ajax.файл отправляется на контроллер в codeigniter, но я получаю 400 ответ (неправильный запрос).Как я могу решить эту проблему?

Вот код:

<form id="load_file" enctype="multipart/form-data">
    <fieldset class="content-group">
    <div class="form-group">
         <label class="control-label col-lg-2">Default file input</label>
        <input id="sortpicture" type="file" name="sortpic" />
                <button id="upload">Upload</button>
    </div>
    </fieldset>
</form>

<script>
$('#upload').on('click', function(e) {
    var base = '<?php echo base_url();?>';
    e.preventDefault();
    var file_data = $('#sortpicture').prop('files')[0];   
    var form_data = new FormData();                  
    form_data.append('file', file_data);
    //alert(form_data);                             
    $.ajax({
        url: 'importa/process', // point to server-side PHP script 
        dataType: 'text',  // what to expect back from the PHP script, if anything
        cache: false,
        contentType: false,
        processData: false,
        data: form_data,                         
        type: 'post',
        success: function(php_script_response){
            alert(php_script_response); // display response from the PHP script, if any
        }
     });
});
</script>

это не проблема пути, потому что когда я удаляю тип: 'post' он работает, но в контроллере, когда я пытаюсьотображаемое имя файла получено сообщение об ошибке undefined index file

Ответы [ 5 ]

0 голосов
/ 27 марта 2019

это проблема безопасности (защита CSRF в Codeigniter).Мы должны добавить csrf_token к данным перед отправкой:

form_data.append('csrf_token_name', 'token');

или отключить защиту CSRF из файла конфигурации.

0 голосов
/ 25 марта 2019

Определите AJAX следующим образом

<script>
$('#upload').on('click', function(e) {
    e.preventDefault();
    var base = '<?php echo base_url();?>';       
    $.ajax({
        url: base + 'process', 
        data:  new FormData(this),
        contentType: false,
        cache: false,
        processData:false,
        type: 'post',
        success: function(response){
            alert(response);
        }
     });
});
</script>

Ваш URL говорит base + 'process', это означает, что вы используете функцию индексации вызова контроллера process. И убедитесь, что ваш базовый URL в config.php оканчивается косой чертой (/) (https://stackoverflow.com/). Таким образом, URL должен выглядеть следующим образом

https://stackoverflow.com/process <- Здесь вы не указали имя функции. поэтому убедитесь, что в вашем контроллере добавлена ​​функция <code>index().

0 голосов
/ 25 марта 2019

Я обычно использую относительный путь с вызовом ajax:

url: '/controller/function'
0 голосов
/ 25 марта 2019

Попробуйте добавить файл, подобный этому

Вы можете присвоить всю свою форму FormData() для обработки

var form = $('form')[0]; // You need to use standard javascript object here
var formData = new FormData(form); 

А в контроллере проверить ввод файла с помощью $_FILES not$_GET или $_POST

print_r($_FILES['sortpic']);
0 голосов
/ 25 марта 2019

Вместо базового URL используйте site_url()

var site_url = '<?php echo site_url('process/index');?>';

и сейчас

 $.ajax({
    url: site_url,
  ....

Предполагая, что вы включили url помощник в config.php и у вас есть контроллер Process с index методом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...