Webmaster общности: Predpriemach.com | SearchEngines.bg

    CodeIgniter – Multiple File Upload

    Codeigniter уроци

    Автор: Fakeheal

    Така и така съм ги подхванала качването на много файлове отведнъж. Този път ще разясня малък “проблем”, който получих при използването на атрибута multiple, при полето за файл и качването на файловете използвайки default upload class-a на CodeIgniter.

    Ето малко информация относно “новото” свойство на file полето в HTML5. С две думи отваря ви се прозорец, който ви дава възможност да селектирате повече от 1 файл. Това става като зададем по един от следните начини file input-а си:

    <input multiple>
    <input multiple="multiple">
    <input multiple="">

    Трябва също да вметна, че това работи под всички браузъри освен Internet Explorer.

    Всичко по принцип е ОК, докато не дойде да използваме file upload класа на CodeIgniter. Понеже използваме multiple атрибута в $_FILES влиза информация, структурирана по друг начин, от който класа очаква.

    Затова единственото, което трябва да свършим е по подредим малко информацията преди да я подадем на upload class-a.

    $arr_files = @$_FILES['userfile']; //тук избирате name атрибуат на вашето поле
    $_FILES = array(); //изчистваме $_FILES
    /** пренареждане **/
    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]
    );
    endforeach;
    /** пренареждане **/

    Ако ви е интересно как с “пренарежда” $_FILES масива, сложете отгоре print_r() и отдолу, за да видите разликите.

    След като е подготвена информацията си конфигурирате upload-a.

    $this->load->library('upload');
    
    $arr_config = array(
    'allowed_types' => 'gif|jpg|png',
    'upload_path' => 'url_path/'
    );

    И други настройки отговарящи на вашите изисквания. После слагате всичко в един цикъл като този и трябва всичко да е ОК:

    foreach(array_keys($_FILES) as $h) {
    //обновяваме конфигурацията при всяка интерация
    $this->upload->initialize($arr_config);
    if ($this->upload->do_upload($h)) {
    //записваме в масив информацията от успешния upload
    $arr_file_data[] = $this->upload->data();
    }
    }

    Общо казано това e.