【问题标题】:I am getting only first image in an array while uploading file, I want all images in array.Using Codeigniter上传文件时我只得到数组中的第一张图像,我想要数组中的所有图像。使用 Codeigniter
【发布时间】:2020-07-10 12:02:36
【问题描述】:

我在这里附上欲望问题的代码。 控制器具有以下代码。 控制器=>

//Load upload library
            $this->load->library('upload');
            $images = array();
            $i = 0;                                                                 
            foreach ($_FILES as $key => $value) 
            {                                                                
                $tmp = explode(".",$value['name'][$i]);                
                $imagename = time().".".end($tmp); 

                $_FILES['file']['name']     = $imagename;
                $_FILES['file']['type']     = $value['type'][$i];
                $_FILES['file']['tmp_name'] = $value['tmp_name'][$i];
                $_FILES['file']['error']    = $value['error'][$i];
                $_FILES['file']['size']     = $value['size'][$i];

                $config['upload_path']   = './uploads/'; 
                $config['allowed_types'] = 'gif|jpg|png';
                $config['file_name']     = $imagename;                                

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

                if ( ! $this->upload->do_upload('file')) 
                {
                    $error = array($i => $this->upload->display_errors());                 
                    echo "<pre>";print_r($error);die;
                }            
                else 
                { 
                    array_push($images,$this->upload->data()['file_name']);                 
                }        
                $i++;                
            }            
            echo "<pre>";print_r($images);die;

这是我在上传文件时使用的表单代码。 查看 =>

<?php $attributes = array(
 "class"                 => "form-horizontal m-t-20",
 "method"                => "post",
 "novalidate"            => "",
 "enctype"               => "multipart/form-data"
);
echo form_open('admin/user/adduser', $attributes); ?>

这是我的文件输入控件。

<label for="file">Profile Images*</label>
<input type="file" name="files[]" id="file" multiple required placeholder="Profile Images" class="form-control">

【问题讨论】:

标签: php file codeigniter


【解决方案1】:

如下修改你的代码

foreach($_FILES["files"]["tmp_name"] as $key=>$value) {

并将$i 更改为$key 如下(适用于所有)

$_FILES['file']['type']     = $_FILES["files"]['type'][$key];

按照 wazabii 的建议,在文件名中附加了一些随机字符串。你可以使用rand(100,10000)

【讨论】:

  • 你确定吗?因为当我传递 tmp_name 时,它​​只会考虑循环中的 tmp_name。
  • 是的,它只在循环时考虑tmp_name。但是,为了获取数据,您应该使用$_FILES["files"]['type'][$key]。试试print_r(),你会看到。
【解决方案2】:

那是因为 time() 在所有图像上都是相同的,所以文件名不是唯一的。这很容易通过将数组键添加到文件名来解决。

$tmp = explode(".",$value['name'][$i]);
$imagename = time()."-".$key.".".end($tmp);

【讨论】:

  • 没用,还是一样的问题。
【解决方案3】:

控制器代码

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 to store in database
    }
    return $image_name;//all images name which is uploaded
}
public function set_upload_options($path)
{   
    $config = array();
    $config['upload_path'] = $path;
    $config['allowed_types'] = 'gif|jpg|png';
    $config['overwrite']     = FALSE;

    return $config;
}

函数调用

  $image_name=$this->upload_multiple('portfolio_image',$path);//for multiple image upload

输入框

 <input type="file" id="portfolio_image" name="protfolio_image[]" >

【讨论】:

    猜你喜欢
    • 2020-07-10
    • 1970-01-01
    • 2019-12-26
    • 2016-11-12
    • 2016-08-03
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多