как загрузить несколько изображений с разными входными файлами в codeigniter

#php #codeigniter #image-uploading

#php #codeigniter #загрузка изображений

Вопрос:

Я хочу загрузить несколько изображений с разными входными файлами с именем массива.

Вид :

 <form action="" enctype="multipart/form-data" method="post">
<input name="picture[]" class="form-control" style="padding-top: 0;" type="file"/>
<input name="picture[]" class="form-control" style="padding-top: 0;" type="file"/>
<input type='submit' value="upload" />
</form>
  

контроллер:

 public function index($id=null)
    {
        $id = $this->input->get('id');
        if ($_POST)
        {
            if ($this->validation()) 
            {
                $file = $this->upload_picture();
                if ($file['status'] == 'success')
                {
                    echo $this->upload->data('file_name');
                }
                else
                {
                    echo $file['data'];
                    echo $file['status'];
                    $this->session->set_flashdata('alert', alert('error', $file['data']));
                }
            }
            else
            {
                $this->session->set_flashdata('alert', alert('error', validation_errors()));
            }
            //redirect($this->agent->referrer());
        }
    }

    private function upload_picture()
    {
        $config['upload_path']      = './assets/img/page/';
        $config['allowed_types']    = 'jpg|png|gif|jpeg';
        $config['max_size']         = 125000; // 1 GB
        $config['encrypt_name']     = TRUE;
        $this->load->library('upload', $config);
        $this->upload->initialize($config);
        if ( ! $this->upload->do_upload('picture[]'))
        {
            return array(
                'status'    => 'error',
                'data'      => $this->upload->display_errors()
                );
        }
        else
        {
            $data                       = $this->upload->data();
            $resize['image_library']    = 'gd2';
            $resize['source_image']     = './assets/img/page/'.$data['file_name'];
            $resize['maintain_ratio']   = TRUE;
            // $resize['width']         = 1920;
            // $resize['height']            = 1080;
            $this->load->library('image_lib', $resize);
            $this->image_lib->resize();
            return array(
                'status'    => 'success',
                'data'      => $this->upload->data()
                );
        }
    }

    private function validation()
    {
        $this->load->library('form_validation');
        $this->form_validation->set_rules('picture[0]',         'Picture',  'trim');
        $this->form_validation->set_rules('picture[1]',         'Picture',          'trim');
        $this->form_validation->set_error_delimiters('',    '<br>');
        return $this->form_validation->run();
    }
  

результат в браузере всегда показывает ошибку, которая означает возврат статуса к ошибке в функции upload_picture, я хочу получить зашифрованное имя файла и сохранить его в базе данных, например a4b8a0e070128b0a3dabd9e2931f7ae3.jpg нет picture.jpg .

введите описание изображения здесь

Ответ №1:

класс загрузки codeigniter не поддерживает имя файла массива таким образом. Итак, либо вам нужно изменить файл класса загрузки (не рекомендуется изменять файл основного класса), либо вам нужно изменить свои коды. Вы можете назвать входные данные следующим образом: picture_1, picture_2 и т.д. В этом случае измените метод upload_picture() следующим образом:

 foreach($_FILES as $key=>$val){
    if(!$this->upload->do_upload($key)){
        $return[$key] = $this->upload->display_errors(); //store this in an array and return at the end. array structure is up to you
    }else{
        $return[$key] = $this->upload->data(); //store this in an array and return at the end. array structure is up to you
    }
}

return $return; //
  

Таким образом, вы загружаете файлы один за другим, используя цикл. Однако вам также необходимо изменить метод main, поскольку теперь он возвращает многомерный массив. Я дал вам только идею…