Я получаю только первое изображение в массиве при загрузке файла, я хочу, чтобы все изображения в массиве. Использование Codeigniter - PullRequest
0 голосов
/ 30 марта 2020

Здесь я прилагаю код проблемы желаний. У Cotroller есть следующий код. Контроллер =>

//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">

Ответы [ 3 ]

1 голос
/ 30 марта 2020

Измените ваш код следующим образом

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

и замените $i на $key следующим образом (применимо ко всем)

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

В соответствии с предложением wazabii, приложил некоторые случайная строка с именем файла. Вы можете использовать rand(100,10000)

1 голос
/ 02 апреля 2020

код контроллера

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('profile_image',$path);//for multiple image upload

поле ввода

 <input type="file" id="portfolio_image" name="protfolio_image[]" >
1 голос
/ 30 марта 2020

Это потому, что время () будет одинаковым на всех изображениях, поэтому имя файла не уникально. Это легко исправить, добавив ключ массива к имени файла.

$tmp = explode(".",$value['name'][$i]);
$imagename = time()."-".$key.".".end($tmp);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...