Как загрузить массив файлов с помощью CodeIgniter? - PullRequest
0 голосов
/ 27 июля 2011

Как бы я загрузить массив файлов с CodeIgniter? У меня есть форма, где я хочу, чтобы пользователи могли загружать более одного файла одновременно. У меня есть код JavaScript, который добавляет дополнительное поле ввода файла с именем «files []», когда они нажимают на кнопку отправки. Это код, который у меня есть, но он всегда говорит, что я не выбрал файл для загрузки в функции display_errors.

    <code>
foreach($this->input->post('files') as $i => $file){
                    $config = array(  //Preferences to validate the image before uploading it
                        'upload_path' => './attachments',
                        'allowed_types' => 'jpg|gif|bmp',
                        'max_size' => '100',
                        'max_width' => '950',
                        'max_height' => '631',
                        'overwrite' => FALSE,
                        'encrypt_name' => TRUE,
                        'remove_spaces' => TRUE
                        );
                    $this->load->library('upload', $config);
                    if($this->upload->do_upload('files['.$i.']')){
                        echo $this->upload->file_data();
                    } else {
                        echo $this->upload->display_errors('<li>', '</li>');
                    }
            }
</code>

Ответы [ 2 ]

2 голосов
/ 27 июля 2011

Вы можете сделать это следующим образом.

По вашему мнению:

<?php echo form_label('Image: ','userfile1');?>
<?php echo form_upload('userfile1');?>
<?php echo form_label('Image: ','userfile2');?>
<?php echo form_upload('userfile2');?>
<!-- and so on --> 

Затем в вашем контроллере, что-то вроде этого ...

//Set File Settings 
$config['upload_path'] = 'uploads/'; 
$config['allowed_types'] = 'jpg|png'; 
$config['remove_spaces'] = TRUE;
$config['overwrite'] = TRUE;
$config['max_size'] = '1024';
$config['max_width'] = '1024'; 
$config['max_height'] = '768'; 

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

// Validate files for upload section...
$success = array();
$errors = array();
$updload_files = array(
        'userfile1' => $_FILES['userfile1'],
        'userfile2' => $_FILES['userfile2'],
        // You can add more
        );

foreach($updload_files as $field => $updload_file)
{
    // Only process submitted file
    if($updload_file['error'] == 0)
    {
       // If there is an error, save it to error var
       if( ! $this->upload->do_upload($field) )
       {
           $errors[] = 'Failed to upload '.$field;  
       }

       // Use this to get the new file info if you need to insert it in a database
       $success[] = array( 'Success to upload '.$field => $this->upload->data());
    } 
    else 
    {
       $errors[] = $field . ' contain no data';  
    }
}
// Heres you could gettin know whats happen
var_dump($errors);
var_dump($success); 
0 голосов
/ 27 июля 2011

Пожалуйста, используйте

                if( $this->upload->do_upload($files) ) {

вместо

                if($this->upload->do_upload('files['.$i.']')) {

Если вы используете вторую строку, вы загружаете файлы с файлами [0], файлами [1], ... именами

Поскольку у вас уже есть значение для текущего цикла, хранящееся в переменной $ file, вы можете напрямую использовать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...