使用 CodeIgniter 上传多张图片

Posted

技术标签:

【中文标题】使用 CodeIgniter 上传多张图片【英文标题】:Multiple image upload with CodeIgniter 【发布时间】:2017-04-08 07:14:51 【问题描述】:

我是在我的项目中使用代码点火器的新用户,我在上传多个文件时遇到一个问题,但最后一个文件只插入到所有图像三个图像字段。

我的控制器是:

function products()
    
     date_default_timezone_set("Asia/Kolkata");
     $config['upload_path'] = './resources/images/products/';
     $config['allowed_types']        = 'gif|jpg|png';
     $config['max_size']             = 1000;
     $config['max_width']            = 1024;
     $config['max_height']           = 768;
     $this->load->library('upload', $config);
     $this->upload->do_upload('userfile');
        $data = array('prod_image' => $this->upload->data(), 
             'prod_image1' => $this->upload->data(),
              'prod_image2' => $this->upload->data());
    $product_image=$data['prod_image']['file_name']; 
    $product_image1=$data['prod_image1']['file_name'];
    $product_image2=$data['prod_image2']['file_name'];

        $data = array(
                'name' => $this->input->post('pd_name'),
                'prod_image' => $product_image,
                'prod_image1' => $product_image1,
                'prod_image2' => $product_image2,
                'created_time' => date('Y-m-d H:i:s'));

        // insert form data into database
        $result_set= $this->tbl_products_model->insertUser($data);

           

我的观点是:

<input class="form-control" name="pd_name"type="text"/>
<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

请帮助如何插入 3 张图片。

我的数据库像

===========================================
id|name|prod_image|prod_image1|prod_image2|
===========================================
 1|ard|           |           |          |
============================================

【问题讨论】:

您在所有字段中都有相同的 name 属性,因此显然它会覆盖第一个并采用最后一个。尝试使用不同的名称属性 确定如何在函数中调用它[' $this->upload->do_upload('userfile');'] 参考本教程它将帮助你 - codexworld.com/codeigniter-upload-multiple-files-images 看这个教程arjunphp.com/… 如果你解决了这个问题,请分享,因为我也面临这些问题 【参考方案1】:

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('userfile');
        $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;

?>

【讨论】:

我需要$this-&gt;upload-&gt;do_upload('userfile'); 才能让它工作!谢谢 @VanTho 感谢您回来告诉我们添加 'userfile' 到 do_upload() 有效。【参考方案2】:

多个文件上传无限文件

数据库表(profile_images)列名是image_name(255,varcher) added_datetime(current timestamp)

查看

<?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>

控制器

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);              
        
  

型号

  public function multiple_images($image = array())

     return $this->db->insert_batch('profile_images',$image);
             

【讨论】:

Model函数中$image = array()是什么意思。 等于 $uploadImgData = $image = array() 这意味着$image = array() 和这个$uploadImgData 是一回事。【参考方案3】:

问题出在以下代码行:

<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

这三个都有相同的名字。

解决这个问题有两种方法:

为所有 3 个输入类型文件指定 diff 名称

创建一个单一输入类型的文件,其多文件选择为真,其名称必须是一个数组,如:

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

进行以下更改,然后重试。

【讨论】:

这里只有一个字段【参考方案4】:

控制器代码。

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;

调用函数

 $image_name=$this->upload_multiple('profile_image',$path=USER_OTHER);//we get all name of uploaded file in $image_name array.

【讨论】:

以上是关于使用 CodeIgniter 上传多张图片的主要内容,如果未能解决你的问题,请参考以下文章

使用 AFNetworking 快速上传多张图片

php中上传多张图片,如何解决?

如何使用 HTTP 将多张图片上传到 Flutter 中的 Rest API?

使用 AFNetworking 上传多张图片

使用 NSURLSession 上传多张图片

Shopify API Python 使用 Python API 上传多张图片