【问题标题】:Codeignitor multiple input file upload from a dynamic formCodeigniter 从动态表单上传多个输入文件
【发布时间】:2019-10-28 16:42:31
【问题描述】:

我有一个使用 Jquery 的动态表单(拖放表单),它有多个输入类型 = 文件。因此,输入类型的名称使用随机数进行更改。以下是查看源代码的示例代码:

<?php echo $error;?>
<?php echo form_open_multipart('upload/do_upload');?>
<form action="" enctype="multipart/form-data" method="post" accept-charset="utf-8">                            
<div id="sjfb-fields">

    <div class="my-3 p-3 bg-white rounded box-shadow">
            <div id="sjfb-399480" class="sjfb-field sjfb-images" style="min-height:100px;">
                <label for="images-399480" style="color:grey;font-size:12px">Upload the screenshot</label>

                <input type="file" name="img-399480" id="images-399480">
            </div>
    </div>

    <div class="my-3 p-3 bg-white rounded box-shadow">
        <div id="sjfb-857945" class="sjfb-field sjfb-images" style="min-height:100px;">
            <label for="images-857945" style="color:grey;font-size:12px">Test Images</label>
            <input type="file" name="img-857945" id="images-857945">
            </div>
    </div>
    <div class="my-3 p-3 bg-white rounded box-shadow">
        <div id="sjfb-792565" class="sjfb-field sjfb-images" style="min-height:100px;">
            <label for="images-792565" style="color:grey;font-size:12px">More Images</label>

            <input type="file" name="img-792565" id="images-792565">
           </div>
    </div>
</div>
<button type="submit" name="save" class="btn btn-primary">Save</button>
</form>

我在控制器中使用了以下代码来上传一张图片:

                    $config['upload_path']   = 'public/Uploads/Inspection/';
                    $config['allowed_types'] = 'gif|jpg|png'; 
                    $config['max_size']      = 100; 
                    $config['max_width']     = 1024; 
                    $config['max_height']    = 768; 

                    $this->load->library('upload', $config);
                    if ( ! $this->upload->do_upload('userfile')) 
                    {
                       $error = array('error' => $this->upload->display_errors()); 

                    }
                    else 
                    { 
                       $data = array('upload_data' => $this->upload->data()); 

                    }

我已尝试使用一种输入类型 =“文件”进行上传,它可以正常工作(使用图像的名称用户文件)。 这个表单有多个输入类型=文件,我想知道有什么方法可以单独上传文件吗? 我也是codeigniter的新手

谢谢!

【问题讨论】:

  • 多文件上传参考此链接stackoverflow.com/questions/20113832/…
  • 感谢您的评论。从单个输入 type="file" 多次上传可以使用 userfile[] 作为名称。但我需要使用单独的输入 type="file" 进行多次上传

标签: php codeigniter codeigniter-upload


【解决方案1】:

看看这个:

控制器部分:

    $files = $_FILES;  //getting the files from post
    $cpt = count($_FILES['photo']['name']); //number of files uploaded

    for($i=0;$i<$cpt;$i++){  // in loop to upload multiple files

      $file_name=$_FILES['photo']['name'][$i];

      if($i==0){     //name the file according to the number /name as u like
        echo $i;
       $name='_first';

      }elseif($i==2){

       $name='_second';  

      }else{

        $name='_third';

      }

//ci库上传照片 $this->load->library('upload');

        $_FILES['photo']['name']= $files['photo']['name'][$i];
        $_FILES['photo']['type']= $files['photo']['type'][$i];
        $_FILES['photo']['tmp_name']= $files['photo']['tmp_name'][$i];
        $_FILES['photo']['error']= $files['photo']['error'][$i];
        $_FILES['photo']['size']= $files['photo']['size'][$i];



      $config = array(
            'file_name'     => $name,
            'allowed_types' => 'jpg',    //add option as u like
            'max_size'      => 3000,
            'overwrite'     => TRUE,
            'upload_path'=>'./uploads/'      //use your respective path to upload
      );

      $this->upload->initialize($config);
   if (!$this->upload->do_upload('photo')) {
      $data_error = array('msg' => $this->upload->display_errors());

                  } else {

                      $data = $this->upload->data();

                  }

    }

和表单在 html 中上传照片:输入名称更改为 photo[] 为所有

<?php echo $error;?>
<?php echo form_open_multipart('upload/do_upload');?>
<form action="" enctype="multipart/form-data" method="post" accept-charset="utf-8">                            
<div id="sjfb-fields">

    <div class="my-3 p-3 bg-white rounded box-shadow">
            <div id="sjfb-399480" class="sjfb-field sjfb-images" style="min-height:100px;">
                <label for="images-399480" style="color:grey;font-size:12px">Upload the screenshot</label>

                <input type="file" name="photo[]" id="images-399480">
            </div>
    </div>

    <div class="my-3 p-3 bg-white rounded box-shadow">
        <div id="sjfb-857945" class="sjfb-field sjfb-images" style="min-height:100px;">
            <label for="images-857945" style="color:grey;font-size:12px">Test Images</label>
            <input type="file" name="photo[]" id="images-857945">
            </div>
    </div>
    <div class="my-3 p-3 bg-white rounded box-shadow">
        <div id="sjfb-792565" class="sjfb-field sjfb-images" style="min-height:100px;">
            <label for="images-792565" style="color:grey;font-size:12px">More Images</label>

            <input type="file" name="photo[]" id="images-792565">
           </div>
    </div>
</div>
<button type="submit" name="save" class="btn btn-primary">Save</button>
</form>

在本地工作 配置选项见https://www.codeigniter.com/user_guide/libraries/file_uploading.html

【讨论】:

  • 谢谢你。如果用户没有添加第一个图像并添加第二个和第三个图像怎么办。我得到偏移错误
  • 你可以检查 ($_FILES['photo']['name'][$i]==null ) 并转义它不会给出错误的部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 2015-01-28
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 2020-07-25
相关资源
最近更新 更多