javascript - 使用 Codeigniter 上传 AJAX 文件,jQuery 将响应显示为 "The action you have requested is not allowed"

标签 javascript php jquery ajax codeigniter

我有一个使用 jquery 上传的 ajax 文件。它总是显示您所请求的操作是不允许的。添加了帮助程序数组 html、url、文件、表单。我尝试了很多方法,但得到了相同的结果。

browser console

browser console for upload_data

这是我的代码

Controller 函数

 function demo() {
          $this->load->view('file_upload_ajax', NULL);
      }

      function upload_file() {

          //upload file
          $config['upload_path'] = 'uploads/';
          $config['allowed_types'] = '*';
          $config['max_filename'] = '255';
          $config['encrypt_name'] = TRUE;
          $config['max_size'] = '1024'; //1 MB
          echo $_FILES['file']['name'];
          if (isset($_FILES['file']['name'])) {
              if (0 < $_FILES['file']['error']) {
                  echo 'Error during file upload' . $_FILES['file']['error'];
              } else {
                  if (file_exists('uploads/' . $_FILES['file']['name'])) {
                      echo 'File already exists : uploads/' . $_FILES['file']['name'];
                  } else {
                      $this->load->library('upload', $config);
                      if (!$this->upload->do_upload('file')) {
                          echo $this->upload->display_errors();
                      } else {
                          echo 'File successfully uploaded : uploads/' . $_FILES['file']['name'];
                      }
                  }
              }
          } else {
              echo 'Please choose a file';
          }
      }

查看文件:file_upload_ajax.php

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Beep Check</title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
        <script src="<?php echo base_url().'js'?>/beep.js"></script>

    </head>
    <body>
        <p id="msg"></p>
        <input type="file" id="file" name="file" />
        <button id="upload">Upload</button>
    </body>
</html>

哔哔声

$(document).ready(function() {

  $('#upload').on('click', function () {
      var file_data = $('#file').prop('files')[0];
      var form_data = new FormData();
      form_data.append('file', file_data);
      $.ajax({           
          url: base_url +"beep/upload_file",
          dataType: 'text',
          cache: false,
          contentType: false,
          processData: false,
          data: form_data,
          type: 'post',
          success: function (response) {
              $('#msg').html(response); // display success response from the server
          },
          error: function (response) {
              $('#msg').html(response); // display error response from the server
          }
      });
  });

});

配置.php

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');


$config['base_url'] = '';


//$config['index_page'] = 'index.php';
$config['index_page'] = '';


$config['uri_protocol'] = 'AUTO';



$config['url_suffix'] = '';


$config['language'] = 'english';


$config['charset'] = 'UTF-8';


$config['enable_hooks'] = FALSE;



$config['subclass_prefix'] = 'MY_';



$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';



$config['allow_get_array']      = TRUE;
$config['enable_query_strings'] = FALSE;
$config['controller_trigger']   = 'c';
$config['function_trigger']     = 'm';
$config['directory_trigger']    = 'd'; // experimental not currently in use


$config['log_threshold'] = 4;


$config['log_path'] = '';


$config['log_date_format'] = 'Y-m-d H:i:s';


$config['cache_path'] = '';


$config['encryption_key'] = 'kccna_mat_1';


$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;


$config['cookie_prefix']    = "";
$config['cookie_domain']    = "";
$config['cookie_path']      = "/";
$config['cookie_secure']    = FALSE;


$config['global_xss_filtering'] = FALSE;


$config['csrf_protection'] = true;
$config['csrf_token_name'] = 'k4rm4_auth';
$config['csrf_cookie_name'] = 'k4rm4_auth';
$config['csrf_expire'] = 7200;


$config['compress_output'] = FALSE;


$config['time_reference'] = 'local';



$config['rewrite_short_tags'] = FALSE;


$config['proxy_ips'] = '';

请帮助我在此先感谢。

最佳答案

如果 $config['csrf_protection'] = TRUE,请检查您的 config.php; 如果它设置为 true,则需要使用 ajax 请求发送 csrf token 。

将此添加到您的 View 页面。

<input type="hidden" id="hidCSRF" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>">

在您的 js 文件中进行以下更改。

$(document).ready(function() {
    $('#upload').on('click', function () {  
        var _csrfName = $('input#hidCSRF').attr('name');
        var _csrfValue = $('input#hidCSRF').val();
        var file_data = $('#file').prop('files')[0];
        var form_data = new FormData();
        form_data.append('file', file_data);
        form_data.append(_csrfName, _csrfValue);

        $.ajax({           
            url: base_url +"beep/upload_file",
            dataType: 'text',
            cache: false,
            contentType: false,
            processData: false,
            data: form_data,
            type: 'post',
            success: function (response) {
                $('#msg').html(response); // display success response from the server
            },
            error: function (response) {
                $('#msg').html(response); // display error response from the server
            }
        });
    });
});

关于javascript - 使用 Codeigniter 上传 AJAX 文件,jQuery 将响应显示为 "The action you have requested is not allowed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42851468/

相关文章:

javascript - querySelectorAll 函数的实时替代方案

jquery - 动态创建的外部事件不可拖动

javascript - 使用先前在 jquery datepicker 上初始化的相应格式设置今天日期

php - 假设解码的百分比编码 URI 变成 UTF-8 是否安全?

javascript - 通过php制作xml时如何处理融合图表中的特殊字符

PHP session 与 Cookie

javascript - 如何从网页将javascript值加载到python中?

php - wordpress 从 get_the_tag_list 中排除标签

javascript - 为 IE 包含 es6-promise 的优雅方式

javascript - Angular - router.navigate() 不重定向到目标页面