2017-01-13 3 views
1

Ich versuche, die mehreren Bilder über mein Formular hochzuladen. Ich habe auf viele gewartet, wie form_open_multipart, indem ich einen Namen als Array in der Upload-Eingabe anrufe.Mehrere Bilder hochladen Fehler in Codeigniter

Ich habe kein Problem mit dem Hochladen von Bildern. Ich kann mehrere Bilder erfolgreich hochladen, aber das Problem tritt auf, wenn ich eine Text- oder Nicht-Bilddatei mit den Bildern auswähle.

Ich überprüfe Szenarien, wenn der Benutzer es vermischt (versehentlich wählen Sie eine andere Datei mit Bildern) Bilder mit Textdatei, dann einige Dateien hochgeladen werden und dann bekomme ich den Fehler der falschen Art der Datei. Im Idealfall kann das Hochladen der Datei nicht möglich sein, wenn eine Datei nicht den richtigen Dateityp hat.

also kann mir irgendjemand dabei helfen, wie kann ich vor dem Dateiupload prüfen, ob alle Dateien erlaubt sind oder nicht?

Ich habe viele Beispiele versucht, aber das gleiche Problem in allen.

Es gibt kein Problem, wenn ich die mehreren Bilder hochladen. Es funktioniert gut.

<input type="file" name="pic_url[]" multiple accept="image/*" /> 

Und unten ist mein Controller

$config['upload_path'] = './assets/prop_pic/'; 
    $config['allowed_types'] = 'gif|jpg|png'; 
    $config['max_size'] = 20000; 
    $config['encrypt_name'] = TRUE; 
    $config['detect_mime'] = TRUE; 
    //initialize upload class 
    $this->load->library('upload', $config); 

    $upload_error = array(); 

    for ($i = 0; $i < count($_FILES['pic_url']['name']); $i++) { 

     $_FILES['pic_url']['name'] = $_FILES['pic_url']['name'][$i]; 
     $_FILES['pic_url']['type'] = $_FILES['pic_url']['type'][$i]; 
     $_FILES['pic_url']['tmp_name'] = $_FILES['pic_url']['tmp_name'][$i]; 
     $_FILES['pic_url']['error'] = $_FILES['pic_url']['error'][$i]; 
     $_FILES['pic_url']['size'] = $_FILES['pic_url']['size'][$i]; 

     if (!$this->upload->do_upload('pic_url')) { 
      // fail 
      $upload_error = array('error' => $this->upload->display_errors()); 
      //$this->load->view('multiple_upload_view', $upload_error); 

      $this->session->set_flashdata('upload_error', $upload_error); 
      redirect('property_master/view_prop_master_form'); 

      break; 
     } 
    } 

Antwort

1

Das erste Problem ist in erster Linie darauf an, wie Sie Ihre Fehler behandeln.

if (!$this->upload->do_upload('pic_url')) { 
    // fail 
    $upload_error = array('error' => $this->upload->display_errors()); 
    //$this->load->view('multiple_upload_view', $upload_error); 

    $this->session->set_flashdata('upload_error', $upload_error); 
    redirect('property_master/view_prop_master_form'); 

    break; 
} 

Der obige Code stoppt einfach den Rest der for-Schleife und leitet den ersten Fehler um.

Eine einfache Lösung wäre, dass Fehler zu protokollieren zu ändern und weiterverarbeiten:

$config['upload_path'] = './assets/prop_pic/'; 
$config['allowed_types'] = 'gif|jpg|png'; 
$config['max_size'] = 20000; 
$config['encrypt_name'] = TRUE; 
$config['detect_mime'] = TRUE; 
//initialize upload class 
$this->load->library('upload', $config); 

$upload_error = array(); 

for ($i = 0; $i < count($_FILES['pic_url']['name']); $i++) { 

    $_FILES['pic_url']['name'] = $_FILES['pic_url']['name'][$i]; 
    $_FILES['pic_url']['type'] = $_FILES['pic_url']['type'][$i]; 
    $_FILES['pic_url']['tmp_name'] = $_FILES['pic_url']['tmp_name'][$i]; 
    $_FILES['pic_url']['error'] = $_FILES['pic_url']['error'][$i]; 
    $_FILES['pic_url']['size'] = $_FILES['pic_url']['size'][$i]; 

    if (!$this->upload->do_upload('pic_url')) { 
     $upload_error[$i] = array('error' => $this->upload->display_errors()); 
    } 
} 

if (!empty($upload_error)) { 
    $this->session->set_flashdata('upload_error', $upload_error); 
    redirect('property_master/view_prop_master_form'); 
} 

Alternativ müßten Sie bei manuell suchen Dateien basierend auf der Dateierweiterung zu validieren.

$config['upload_path'] = './assets/prop_pic/'; 
$config['allowed_types'] = 'gif|jpg|png'; 
$config['max_size'] = 20000; 
$config['encrypt_name'] = TRUE; 
$config['detect_mime'] = TRUE; 
//initialize upload class 
$this->load->library('upload', $config); 

$upload_error = array(); 

foreach ($_FILES['pic_url'] as $key => $file) { 

    $ext = pathinfo($file['name'], PATHINFO_EXTENSION); 
    if (strpos($config['allowed_types'], $ext) === false) { 
     $upload_error[$key] => array('error' => sprintf('<p>Invalid file extension (%s)</p>', $ext)); 
     continue; 
    } 

    $_FILES['userfile'] = $file; 
    $this->upload->initialize($config); 

    if (!$this->upload->do_upload('userfile')) { 
     $upload_error[$key] = array('error' => $this->upload->display_errors()); 
    } else { 
     // do something with $this->upload->data(); 
    } 
} 

if (!empty($upload_error)) { 
    $this->session->set_flashdata('upload_error', $upload_error); 
    redirect('property_master/view_prop_master_form'); 
} 

Hoffnung, die

+0

Dank für Ihre Anregung und Hilfe Sir hilft. Ich verwende diese Lösung definitiv für meinen Code. Nochmals vielen Dank & wirklich zu schätzen Ihre Unterstützung. –