Multiple image upload with CodeIgniter

后端 未结 4 1693
走了就别回头了
走了就别回头了 2020-11-27 04:02

I am new user to using code igniter in my project, I am facing one problem while uploading multiple files but the last one only insert to all image three images field.

相关标签:
4条回答
  • 2020-11-27 04:39

    Html :

    <input type="file" name="userfile[]" multiple="multiple">
    

    PHP :

    <?php
    public function products()
    {       
        $this->load->library('upload');
        $dataInfo = array();
        $files = $_FILES;
        $cpt = count($_FILES['userfile']['name']);
        for($i=0; $i<$cpt; $i++)
        {           
            $_FILES['userfile']['name']= $files['userfile']['name'][$i];
            $_FILES['userfile']['type']= $files['userfile']['type'][$i];
            $_FILES['userfile']['tmp_name']= $files['userfile']['tmp_name'][$i];
            $_FILES['userfile']['error']= $files['userfile']['error'][$i];
            $_FILES['userfile']['size']= $files['userfile']['size'][$i];    
    
            $this->upload->initialize($this->set_upload_options());
            $this->upload->do_upload();
            $dataInfo[] = $this->upload->data();
        }
    
        $data = array(
            'name' => $this->input->post('pd_name'),
            'prod_image' => $dataInfo[0]['file_name'],
            'prod_image1' => $dataInfo[1]['file_name'],
            'prod_image2' => $dataInfo[2]['file_name'],
            'created_time' => date('Y-m-d H:i:s')
         );
         $result_set = $this->tbl_products_model->insertUser($data);
    }
    
    private function set_upload_options()
    {   
        //upload an image options
        $config = array();
        $config['upload_path'] = './resources/images/products/';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size']      = '0';
        $config['overwrite']     = FALSE;
    
        return $config;
    }
    ?>
    
    0 讨论(0)
  • 2020-11-27 04:41

    Multiple files uploads unlimited files

    Database table(profile_images) column names are image_name(255,varcher), added_datetime(current timestamp)

    View

    <?php echo validation_errors();?>
    <?php echo form_open_multipart('pages/multiple_files');?>
    <p><input type="file" multiple="multiple" name="image_name[]" class="form-control" /></p>
    
    <input type="submit" class="btn btn-success btn-block"/> 
    </form>
    

    Controller

    public function multiple_files(){
      $this->load->library('upload');
      $image = array();
      $ImageCount = count($_FILES['image_name']['name']);
            for($i = 0; $i < $ImageCount; $i++){
                $_FILES['file']['name']       = $_FILES['image_name']['name'][$i];
                $_FILES['file']['type']       = $_FILES['image_name']['type'][$i];
                $_FILES['file']['tmp_name']   = $_FILES['image_name']['tmp_name'][$i];
                $_FILES['file']['error']      = $_FILES['image_name']['error'][$i];
                $_FILES['file']['size']       = $_FILES['image_name']['size'][$i];
    
                // File upload configuration
                $uploadPath = './assets/images/profiles/';
                $config['upload_path'] = $uploadPath;
                $config['allowed_types'] = 'jpg|jpeg|png|gif';
    
                // Load and initialize upload library
                $this->load->library('upload', $config);
                $this->upload->initialize($config);
    
                // Upload file to server
                if($this->upload->do_upload('file')){
                    // Uploaded file data
                    $imageData = $this->upload->data();
                     $uploadImgData[$i]['image_name'] = $imageData['file_name'];
    
                }
            }
             if(!empty($uploadImgData)){
                // Insert files data into the database
                $this->pages_model->multiple_images($uploadImgData);              
            }
      }
    

    Model

      public function multiple_images($image = array()){
    
         return $this->db->insert_batch('profile_images',$image);
                 }
    
    0 讨论(0)
  • 2020-11-27 04:54

    The problem is with the following line of code:

    <input type="file"  class="file_upload2" name="userfile"/> //1
    <input type="file" class="file_upload2" name="userfile"/> //2
    <input type="file" class="file_upload2" name="userfile"/>//3
    

    These all three have same name.

    To solve this there are two ways:

    Give diff name to all 3 input type file

    Make a single input type file with its multiple file selection true and its name must be an array like:

    <input type="file" name="filefield[]" multiple="multiple">
    

    Make the following changes and try again.

    0 讨论(0)
  • 2020-11-27 04:54

    code of controller.

    public function upload_multiple($field_name,$path){
        $this->load->library('upload');
        $files = $_FILES;
        $cpt = count($_FILES[$field_name]['name']);//count for number of image files
        $image_name =array();
        for($i=0; $i<$cpt; $i++)
        {           
            $_FILES[$field_name]['name']= $files[$field_name]['name'][$i];
            $_FILES[$field_name]['type']= $files[$field_name]['type'][$i];
            $_FILES[$field_name]['tmp_name'] = $files[$field_name]['tmp_name'][$i];
            $_FILES[$field_name]['error']= $files[$field_name]['error'][$i]; 
            $_FILES[$field_name]['size'] = $files[$field_name]['size'][$i];
    
            $this->upload->initialize($this->set_upload_options($path));
             //for initalizing configuration for each image
            $this->upload->do_upload($field_name);  
    
            $data = array('upload_data' => $this->upload->data()); 
            $image_name[]=$data['upload_data']['file_name'];
            //store file name into array
    
        }
        return $image_name;//all images name which is uploaded
    }
    public function set_upload_options($path)
    {   
        $config = array();
        $config['upload_path'] = $path;
        $config['allowed_types'] = '*';
        $config['overwrite']     = FALSE;
    
        return $config;
    }
    

    call function

     $image_name=$this->upload_multiple('profile_image',$path=USER_OTHER);//we get all name of uploaded file in $image_name array.
    
    0 讨论(0)
提交回复
热议问题