Codeigniter & HTML5 - Попытка загрузить несколько изображений одновременно - PullRequest
3 голосов
/ 28 марта 2012

Просмотр выглядит так

<?=form_open_multipart('upload/process');?>
        <input type="file" multiple="multiple" name="userfile[]" id="userfile" />
        <?=form_submit('upload', 'Upload');?>
    <?=form_close();?>

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

У меня есть базовые знания о codeigniter

ps: я не хочуиспользуйте загружаемые или похожие плагины для загрузки изображений.пытаясь сделать его как можно более легким

Обновление это тот массив, который я получаю, когда пытаюсь использовать var_dump ($ _ FILES ['userfile']).какой цикл использовать для разделения данных соответствующих изображений.

 array
  'name' => 
    array
      0 => string '01.jpg' (length=6)
      1 => string '1 (26).jpg' (length=10)
  'type' => 
    array
      0 => string 'image/jpeg' (length=10)
      1 => string 'image/jpeg' (length=10)
  'tmp_name' => 
    array
      0 => string 'C:\wamp\tmp\php2AC2.tmp' (length=23)
      1 => string 'C:\wamp\tmp\php2AD3.tmp' (length=23)
  'error' => 
    array
      0 => int 0
      1 => int 0
  'size' => 
    array
      0 => int 409424
      1 => int 260343

Ответы [ 3 ]

8 голосов
/ 28 марта 2012

Я тоже столкнулся с этой проблемой. Данные $_FILES отправляются с разнородной структурой (из-за атрибута multiple=""), поэтому codeigniter не может их обработать. Подготовьте это перед загрузкой:

$arr_files  =   @$_FILES['userfile'];

$_FILES     =   array();
foreach(array_keys($arr_files['name']) as $h)
$_FILES["file_{$h}"]    =   array(  'name'      =>  $arr_files['name'][$h],
                                    'type'      =>  $arr_files['type'][$h],
                                    'tmp_name'  =>  $arr_files['tmp_name'][$h],
                                    'error'     =>  $arr_files['error'][$h],
                                    'size'      =>  $arr_files['size'][$h]);

Тогда в функции цикла используйте это:

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

$arr_config =   array(  'allowed_types' =>  'gif|jpg|png',
                            'upload_path'   =>  'url_path/');

foreach(array_keys($_FILES) as $h) {

    // Initiate config on upload library etc.

    $this->upload->initialize($arr_config);

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

        $arr_file_data  =   $this->upload->data();

    }

}

Пояснение:
Я просто изменяю структуру $_FILES на общую структуру, которая отправляется по умолчанию <input type="file" />, и запускаю цикл, выбирая все их имена ключей.

1 голос
/ 28 марта 2012

Цикл, который вам нужен:

for($i=0; $i<count($_FILES['name']); $i++){
    if ($_FILES['error'][$i] == 0) {
        //do your stuff here, each image is at $_FILES['tmp_name'][$i]
    }
}

Обратите внимание, что здесь используется не класс загрузки CI, а простой PHP, с которым мне обычно легче работать вместо класса CI.

0 голосов
/ 20 мая 2014

Проверьте этот класс для загрузки нескольких файлов https://github.com/stvnthomas/CodeIgniter-Multi-Upload

Это помогло мне.

...