【问题标题】:not able to upload file in codeigniter form [duplicate]无法以codeigniter形式上传文件[重复]
【发布时间】:2018-08-17 15:05:53
【问题描述】:

我有一个表单,可以用来输入数据和上传文件

<form enctype="multipart/form-data" id="form">
  <input type="file" id="fileImage" class="fileImage" name="fileImage" >
  <button type="submit" id="save" class="save-icon-btn">
    Submit
  </button>
</form>

Ajax 代码

$("#save").click(function()
  {
    var form_data = new FormData($('#form')[0]);
    jQuery.ajax(
      {
        type: "POST",
        url: "<?php echo base_url(); ?>" + "class/student",
        data: form_data,
        processData: false,
        contentType: false,
        success: function(res) 
          {
            console.log(res);
            alert(res);
          }
      });
  });

后端代码

$config['upload_path'] = './assets/student/.';
$config['allowed_types'] = 'gif|jpg|png|doc|txt';
$config['max_size'] = 1024 * 8;
$config['encrypt_name'] = TRUE;
$this->load->library('upload', $config);
$this->upload->initialize($config);

if (!$this->upload->do_upload('fileImage')) 
    {
      $error = array('error' => $this->upload->display_errors());
       print_r($error);
    }
else
    {
      $data = $this->upload->data();
    }

我希望再添加一个上传功能,允许用户在同一个表单中为单独的类别再上传一个文件。所以新的形式应该是

<form enctype="multipart/form-data" id="form">
  <input type="file" id="fileImage" class="fileImage" name="fileImage" >
  <input type="file" id="fileReport" class="fileReport" name="fileReport"  >
  <button type="submit" id="save" class="save-icon-btn">
    Submit
  </button>
</form>

对于后端,我将以下代码添加到现有代码中

$config1['upload_path'] = './assets/report/.';
$config1['allowed_types'] = 'gif|jpg|png|doc|txt';
$config1['max_size'] = 1024 * 8;
$config1['encrypt_name'] = TRUE;
$this->load->library('upload', $config1);
$this->upload->initialize($config1);

if (!$this->upload->do_upload('fileReport')) 
    {
      $error = array('error' => $this->upload->display_errors());
       print_r($error);
    }
else
    {
      $data = $this->upload->data();
    }

但是我无法理解我需要如何更改我的 ajax 代码以便它可以发送数据。

使用更新的表单和后端代码,我无法保存这两个文件。只有 fileImage 被上传,而不是 fileReport。

【问题讨论】:

  • 你遇到了什么问题??
  • @Vishnu Bhadoriya 当我使用新表单并使用后端代码两次以及名称更改时,只有一张图片被上传
  • 您只发送和处理 1 个文件。您必须发送这两个文件并分别处理它们,因为 codeigniter 上传库一次只做一个。你的逻辑是正确的,你只需要复制它(基本上)。
  • 这也是你的问题:stackoverflow.com/questions/49186671/… ...你真的不应该重复问题
  • @Alex 我已经更新了帖子,你给的链接不是我的,但是我正在关注它,因为它和我的情况一样

标签: php ajax codeigniter file-upload upload


【解决方案1】:

ajax 代码:

var form_data = new FormData($('#form')[0]);
form_data.append('my_file3[]', $('input[type=file]')[0].files[0]); 
form_data.append('my_file3[]', $('input[type=file]')[1].files[0]); 
jQuery.ajax(
      {
        type: "POST",
        url: "<?php echo base_url(); ?>" + "class/student",
        data: form_data,
        async : false,
        cache : false,
        processData: false,
        contentType: false,
        success: function(res) 
          {
            console.log(res);
            alert(res);
          }
      });

在控制器下面的代码:

 $cpt = count ($_FILES['my_file3']['name']);
    $target_dir = 'assets/files';
    $this->common_lib->make_dir_if_not($target_dir);
    for($i = 0; $i < $cpt; $i ++) {

        $_FILES['images']['name'] = $_FILES['my_file3']['name'][$i];
        $_FILES['images']['type'] = $_FILES['my_file3']['type'][$i];
        $_FILES['images']['tmp_name'] = $_FILES['my_file3']['tmp_name'][$i];
        $_FILES['images']['error'] = $_FILES['my_file3']['error'][$i];
        $_FILES['images']['size'] = $_FILES['my_file3']['size'][$i];

        $config = $this->common_lib->set_upload_config($target_dir);

        $this->load->library('upload');
        $this->upload->initialize($config); 
        if($this->upload->do_upload("images")){
        $fileName = $_FILES['images']['name'];
        $images[] = $fileName;
        $my_file .= $fileName;
        }
    }

** 我为邮件设置、上传设置、制作目录等常用功能制作了公共库(common_lib)。您可以使用您的自定义配置。

【讨论】:

  • 添加了您给定的参数,但只有 1 个文件正在上传
  • 按照你写代码的方式,一次只能上传一个文件
  • 你应该解释这意味着什么以及它如何解决问题。
  • @ezw 你能看看更新后的帖子吗
  • @sorak 我已经更新了帖子,你可以看看吗
【解决方案2】:

请尝试以下代码。如果可行,我会详细说明。

print_r($_FILES); // show me this if it doesn't work

$this->load->library('upload');

$config['upload_path'] = './assets/student/.';
$config['allowed_types'] = 'gif|jpg|png|doc|txt';
$config['max_size'] = 1024 * 8;
$config['encrypt_name'] = TRUE;

$this->upload->initialize($config);

if (!$this->upload->do_upload('fileImage')) 
    {
      $error = array('error' => $this->upload->display_errors());
       print_r($error);
    }
else
    {
      $data = $this->upload->data();
    }

$config1['upload_path'] = './assets/report/.';
$config1['allowed_types'] = 'gif|jpg|png|doc|txt';
$config1['max_size'] = 1024 * 8;
$config1['encrypt_name'] = TRUE;

$this->upload->initialize($config1, true);

if (!$this->upload->do_upload('fileReport')) 
    {
      $error = array('error' => $this->upload->display_errors());
       print_r($error);
    }
else
    {
      $data = $this->upload->data();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2015-06-05
    • 2020-02-05
    • 2014-07-16
    • 1970-01-01
    • 2012-07-08
    • 2019-03-01
    相关资源
    最近更新 更多