CodeIgniter – Multiple File Upload

Автор: 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.

Вашият коментар