2017-01-13 3 views
1

Я пытаюсь загрузить несколько изображений через мою форму. Я позаботился о многих, как form_open_multipart, вызывая имя как Array в загружаемом входе.Ошибка загрузки нескольких изображений в Codeigniter

У меня нет проблем с загрузкой изображений. Я могу загрузить несколько изображений успешно, но проблема возникает, когда я выбираю любой текст или файл без изображения с изображениями.

Я проверяю сценарии, что если пользователь смешивает (случайно выбирает любой другой файл с изображениями) изображения с текстовым файлом, тогда некоторые файлы загружаются, а затем я получаю ошибку не того типа файла. В идеальном случае он может не разрешить загрузку файла, если какой-либо файл не имеет нужного типа.

так может ли кто-нибудь помочь мне в этом, как я могу проверить перед загрузкой файла, что все файлы разрешены или нет?

Я пробовал много примеров, но получал такую ​​же проблему.

Нет проблем, если я загружу несколько изображений. Это нормально.

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

И это ниже мой контроллер

$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; 
     } 
    } 

ответ

1

Первая проблема заключается в основном вниз, как вы обрабатывать ваши ошибки.

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; 
} 

Приведенный выше код просто остановит остальную часть цикла for и перенаправит первую ошибку.

простое решение было бы изменить, что для регистрации сбоев и продолжить обработку:

$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'); 
} 

Кроме того, вам нужно будет посмотреть на ручной проверки файлов на основе их расширения файла.

$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'); 
} 

Надежда, что помогает

+0

Благодарим Вас за предложение и помощь, сэр. Я определенно применяю это решение к своему коду. Еще раз спасибо и очень ценю вашу поддержку. –

Смежные вопросы