2012-03-30 13 views
4

Ich versuche, mehrere Bilder hochzuladen und ich habe ein jquery-Plugin eingerichtet, so dass ich nach mehreren Dateien suchen und sie auswählen kann.Mehrere Dateien hochladen userfile [] array?

Das einzige Problem, das ich habe, ist den Zugriff auf die Datei-Array in meinem Controller, weiß jemand, wie ich das tun kann? Vielen Dank.

Ansicht:

<input type="file" name="userfile[]" id="userfile" class="multi" /> 

Antwort

8

Ich hatte das gleiche Problem auf einem Projekt im letzten Jahr, nach etwas zu suchen, ich eine perfekte Funktion gefunden.

Ich nehme keine Anerkennung dafür, aber kann nicht abmelden, wo ich es gefunden habe, wenn jemand weiß, bitte Link zurück zum Autor.

Sicherstellen, dass die Form, die Dateien wie diese

<input type="file" name="userfile"/> 
<input type="file" name="userfile2" /> 
<input type="file" name="userfile3" /> ..etc 

Oder

<input type="file" name="userfile[]" /> 

Die Funktion ..

function multiple_upload($upload_dir = 'uploads', $config = array()) 
{ 
    $files = array(); 

    if(empty($config)) 
    { 
     $config['upload_path'] = '../path/to/file'; 
     $config['allowed_types'] = 'gif|jpg|jpeg|jpe|png'; 
     $config['max_size']  = '800000000'; 
    } 

     $this->load->library('upload', $config); 

     $errors = FALSE; 

     foreach($_FILES as $key => $value) 
     {    
      if(! empty($value['name'])) 
      { 
       if(! $this->upload->do_upload($key)) 
       {           
        $data['upload_message'] = $this->upload->display_errors(ERR_OPEN, ERR_CLOSE); // ERR_OPEN and ERR_CLOSE are error delimiters defined in a config file 
        $this->load->vars($data); 

        $errors = TRUE; 
       } 
       else 
       { 
        // Build a file array from all uploaded files 
        $files[] = $this->upload->data(); 
       } 
      } 
     } 

     // There was errors, we have to delete the uploaded files 
     if($errors) 
     {      
      foreach($files as $key => $file) 
      { 
       @unlink($file['full_path']);  
      }      
     } 
     elseif(empty($files) AND empty($data['upload_message'])) 
     { 
      $this->lang->load('upload'); 
      $data['upload_message'] = ERR_OPEN.$this->lang->line('upload_no_file_selected').ERR_CLOSE; 
      $this->load->vars($data); 
     } 
     else 
     { 
      return $files; 
     } 
    } 

Jetzt eine Weile es ist schon genannt hat, da ich verwendet habe, Wenn Sie zusätzliche Hilfe benötigen, lassen Sie es mich wissen.

+0

Hey, danke, ich habe es tatsächlich geschafft, es herauszufinden ... hurra! –

+0

Ich hasse, dass Codeigniter keine Unterstützung für mehrere Dateien hat wie ''. Diese "Lösung" ist eine tatsächliche Problemumgehung. Aber ich muss annehmen, dass diese Lösung eine der besten ist. – machineaddict

+0

Hallo, ich würde gerne Hilfe fragen, wie ich das einrichten kann, wenn ich nur 1 Seite brauche, wo auch mein HTML-Formular liegt. Also übermittle ich mein Formular selbst. Und welchen Parameter sollte ich weitergeben? Danke – propaganja

0

Der von ojjwood oben bereitgestellte HTML-Code erzeugt mehrere Eingabefelder. Wenn Sie nur ein Eingabefeld möchten, aber dennoch mehrere Dateien hochladen möchten, müssen Sie das Attribut multiple="multiple" in Ihr <input> Element einfügen. Die [] in name="userfile[]" ermöglicht, dass die geposteten Daten ein Array und nicht nur ein einzelner Wert sein können.

Auf der Codeigniter/PHP-Seite der Dinge müssen Sie $_POST['userfile] anstelle von $this->input->post('userfile') für die Arbeit mit Arrays verwenden.

1

Um Jquery multiple Upload mit HTML-Elementen Array [] wie folgt im Akt des Empfangens von Daten sobrescrevi die globale Variable $ _FILES PHP, so dass die Funktion do_upload könnte später lesen. siehe:

  #copy the original array;    
      $temp_array; 
      foreach($_FILES['fil_arquivo'] as $key => $val) 
      { 
       $i = 0; 
       foreach($val as $new_key) 
       { 
        $temp_array[$i][$key] = $new_key; 
        $i++; 
       } 
       // 
      } 

      $i = 0; 
      foreach($temp_array as $key => $val) 
      { 
       $_FILES['file'.$i] = $val; 
       $i++; 
      } 

      #clear the original array; 
      unset($_FILES['fil_arquivo']); 

      $upload_path = 'media/arquivos'; 

      $config['upload_path'] = $upload_path; 
      $config['allowed_types'] = 'doc|docx|xls|xlsx|ppt|pptx|pdf|txt|jpg|png|jpeg|bmp|gif|avi|flv|mpg|wmv|mp3|wma|wav|zip|rar'; 
      $config['encrypt_name'] = true; 

      $this->upload->initialize($config); 
      foreach($_FILES as $key => $value) 
      {    
       if(! empty($value['name'])) 
       { 
        if($this->upload->do_upload($key)) 
        {           
         $this->upload->data(); 
        } 
       } 
      } 
Verwandte Themen