Как загрузить несколько файлов в codeigniter 3.0.1

Как загрузить несколько файлов в codeigniter 3.0.1. Есть аналогичные проблемы и решения в stackoverflow, но, к сожалению, они не помогают решить проблему, с которой я столкнулся.

You did not select a file to upload сообщение об ошибке. You did not select a file to upload с моим текущим кодом

view (addGallery)

 <section> <h2>Add Gallery</h2> <?php echo form_open('Newsupload/gallery', ['id'=>'news', 'name'=>'news', 'method'=>'post','enctype'=>'multipart/form-data']) ?> <div class="grp width-50"> <label for="name">Album Name</label> <input type="text" name="name" id="name" value="" placeholder=""> </div> <div class="grp width-100"> <div id="selectedFiles"></div> <input type="file" id="files" name="files[]" multiple size="20"><br/> </div> <?php if (isset($error)) { echo $error; } ?> <grp class="grp width-100"> <button>Add</button> </grp> </form> </section> 

контроллер (галерея)

 public function gallery() { $this->load->library('upload'); $files = $_FILES; $cpt = count($_FILES['files']['name']); for($i=0; $i<$cpt; $i++) { $_FILES['files']['name']= $files['files']['name'][$i]; $_FILES['files']['type']= $files['files']['type'][$i]; $_FILES['files']['tmp_name']= $files['files']['tmp_name'][$i]; $_FILES['files']['error']= $files['files']['error'][$i]; $_FILES['files']['size']= $files['files']['size'][$i]; $this->upload->initialize($this->set_upload_options()); // $this->upload->do_upload('files[]'); if (!$this->upload->do_upload('files[]')) { $error =['error' => $this->upload->display_errors()]; $this->load->view('admin/addGallery', $error); } } } public function set_upload_options() { $config['upload_path'] = getcwd().'/upload/'; $config['allowed_types'] = 'gif|jpg|jpeg|png'; $config['remove_spaces'] = true; return $config; } 

Solutions Collecting From Web of "Как загрузить несколько файлов в codeigniter 3.0.1"

По умолчанию CodeIgniter не поддерживает многофайловую загрузку. Таким образом, вы можете использовать эту библиотеку Multiple Upload Library CodeIgniter

Я думаю, вам нужно изменить эту строку:

 if (!$this->upload->do_upload('files[]')) 

в

 if (!$this->upload->do_upload('files')) 

вы не передали имя файла для загрузки функции. Попробуйте это.

 if (!$this->upload->do_upload($_FILES['files']['name'])) { $error =['error' => $this->upload->display_errors()]; $this->load->view('admin/addGallery', $error); } 

попробуй это:

  $files = $_FILES; $cpt = count($_FILES['files']['name']); for($i=0; $i<$cpt; $i++) { $_FILES['files']['name']= $files['files']['name'][$i]; $_FILES['files']['type']= $files['files']['type'][$i]; $_FILES['files']['tmp_name']= $files['files']['tmp_name'][$i]; $_FILES['files']['error']= $files['files']['error'][$i]; $_FILES['files']['size']= $files['files']['size'][$i]; $this->upload->initialize($this->set_upload_options()); $this->upload->do_upload(); $fileName = $_FILES['files']['name']; $images[] = $fileName; 

и выполните функцию set_upload_options ()

 $config = array(); $config['upload_path'] = './upload/'; //give the path to upload the image in folder $config['allowed_types'] = 'gif|jpg|png'; $config['max_size'] = '0'; $config['overwrite'] = FALSE; return $config; 

Для получения дополнительной загрузки нескольких файлов с помощью codeigniter попробуйте это http://w3code.in/2015/09/upload-file-using-codeigniter/

Попробуйте ниже

 for($i=0; $i<$cpt; $i++) { $_FILES['files'] = $files[$i]; $this->upload->initialize($this->set_upload_options()); if (!$this->upload->do_upload('files')) { $error =['error' => $this->upload->display_errors()]; $this->load->view('admin/addGallery', $error); } } 

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

  // Image upload Config $config['upload_path'] = './uploads/'; $config['allowed_types'] = 'gif|jpg|jpeg|png'; $config['max_size'] = '1000000'; $config['encrypt_name'] = TRUE; $this->load->library('upload', $config); // Upload Files if ( $_FILES['first_file']['name'] && $this->upload->do_upload('first_file') ) { $first_file = $this->upload->data(); } if ( $_FILES['second_file']['name'] && $this->upload->do_upload('second_file') ) { $second_file= $this->upload->data(); } 

Просто, что я понял из библиотеки $this->upload->do_upload('inputelementname') , не нужно вводить имя элемента. Он должен быть ключом массива файлов.

Поэтому в этом контексте это должно

 if($_FILES){ $filecount=count($_FILES['addmediaelement']['name']); for($i=0; $i<$filecount; $i++){ $_FILES['mediaelement']['name']=$_FILES['addmediaelement']['name'][$i]; $_FILES['mediaelement']['type']=$_FILES['addmediaelement']['type'][$i]; $_FILES['mediaelement']['tmp_name']=$_FILES['addmediaelement']['tmp_name'][$i]; $_FILES['mediaelement']['error']=$_FILES['addmediaelement']['error'][$i]; $_FILES['mediaelement']['size']=$_FILES['addmediaelement']['size'][$i]; $config['upload_path']=path/to/save/file; $config['file_name']=filealternatename.extension; $config['max_size']=MAXSIZE; //max size constant $config['max_width']=MAXWIDTH; //max width constant $config['max_height']=CMPMAXHEIGHT; //max height constant $config['allowed_types']='jpg|png'; if(!is_dir($config['upload_path'])){ mkdir($config['upload_path'], 0775); } $this->upload->initialize($config); $imageuploaderres[]=$this->upload->do_upload('mediaelement'); } }