CodeIgniter - Multiple File Upload
20-11-2012
Така и така съм ги подхванала качването на много файлове отведнъж. Този път ще разясня малък “проблем”, който получих при използването на атрибута 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.


/ Трябва да сте регистриран за да напишете коментар /
От: Hous
13:37 11-04-2013
Имам едно питане,добре ли е защитено това allowed_types' => 'gif|jpg|png',
защото нали може да се качват други файлове във тези формати?Или codeigniter си е защитен framework ?
От: Fakeheal
15:24 13-04-2013
По принцип би трябвало всичко да е защитено, но ако искаш за по-сигурно може да проверяваш с mime types. Макар че ако напишеш само gif, CodeIgniter проверява за mime type-a.
От: Hous
10:46 14-04-2013
"CodeIgniter проверява за mime type-a."
Ясно :)
1