Comment télécharger plusieurs fichiers dans Codeigniter 3.0.1. Stackoverflow présente des problèmes et des solutions similaires, mais malheureusement aucun d'entre eux n'aide à résoudre le problème auquel je suis confronté.
C'est le message d'erreur apparaissant You did not select a file to upload
avec mon code actuel
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>
contrôleur (galerie)
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;
}
Par défaut, codeIgniter ne prend pas en charge le téléchargement de plusieurs fichiers. Ainsi, vous pouvez utiliser Cette bibliothèque Bibliothèque de téléchargement multiple CodeIgniter
Je pense que vous devez changer cette ligne:
if (!$this->upload->do_upload('files[]'))
à
if (!$this->upload->do_upload('files'))
vous n'avez pas transmis le nom du fichier à la fonction de téléchargement. Essayez ceci.
if (!$this->upload->do_upload($_FILES['files']['name']))
{
$error =['error' => $this->upload->display_errors()];
$this->load->view('admin/addGallery', $error);
}
Vous pouvez télécharger plusieurs fichiers avec CodeIgniter en une seule demande. Vous devez juste faire do_upload()
pour chaque fichier. Voici une implémentation. Vous pouvez travailler dans une boucle si nécessaire.
// 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();
}
S'il vous plaît essayer ci-dessous
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);
}
}
Juste que j'ai compris de la bibliothèque $this->upload->do_upload('inputelementname')
ne doit pas être le nom de l'élément en entrée. Ce devrait être la clé du tableau de fichiers.
Donc, dans ce contexte, cela devrait fonctionner
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');
}
}
essaye ça:
$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;
et créer une fonction 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;
Pour plus Télécharger plusieurs fichiers en utilisant codeigniter essayez ceci http://w3code.in/2015/09/upload-file-using-codeigniter/