Упрощаем множественное вложение файлов

Мульти заливка простая реализация

Массовый привет. Пост обращен к тем, у кого уже есть веб-сервис, который делает что-то. И у которого есть возможность прилеплять множество файлов. До HTML5 все было чудесно. Каждый выкручивался как мог. Множественное приложение было доступно через Flash, некоторые под элементом Обзор создавали плюсик, который динамически добавлял еще один обзор. Но не удобно все это.

В первую очередь пост обращен к веб-разработчикам хостингов, сервисов с портфолио, разработчикам интернет магазинов.

Давайте я покажу, как при помощи небольшой надстройки превратить заливание множества файлов в удобное для пользователя действие. Не нужно никаких Drag&Drop. Хоть это и доступно, но нам это сейчас не нужно, пользователю хватит выделения в одном окне обзора. Да и с ним будут трудности для браузеров не поддерживающих HTML5 multiplefileupload

 

Вот что у нас есть. В HTML

<input name="filename" type="file" />

В PHP – какая-то функция для обработки вложенного файла. Назовем ее

File_upload($_FILES[‘filename’]);

 

В первую очередь немножко меняем наш HTMLкод. Используем новое свойство, а также передаем имя файла как массив

<input multiple="true" name="filename[]" type="file" />

На приемке – в PHP при этом все множество файлов будет разбито на подмассивы в последнем разделении. То есть – было

$_FILES[‘filename’][‘tmp_name’]=Имя залитого файла

А станет

$_FILES[‘filename’][‘tmp_name’][0]=Имя залитого файла

$_FILES[‘filename’][‘tmp_name’][1]=Имя залитого файла

То есть если мы разобьем все это множество на прежний массив и пройдемся по всем его элементам – нам просто надо будет вызвать функцию несколько раз для каждого из файлов. Кардинально ничего не поменяется.

Для удобства – напишем процедуру, которая будет вытаскивать каждый из залитых файлов и преобразовывать его в прежний массив

function many_files($file){

  $tmpfiles=array();

  if (empty($_FILES[$file]['tmp_name'][0])){

  if (isset($_FILES[$file]['tmp_name'])){ // был залит один файл

  return array(0=>$_FILES[$file]);

  }

  return false;

  }

  foreach ($_FILES[$file]['tmp_name'] as $key=>$val){

  $tmpfiles[$key]=array(

'name'=>$_FILES[$file]['name'][$key],

'type'=>$_FILES[$file]['type'][$key],

'tmp_name'=>$_FILES[$file]['tmp_name'][$key],

'error'=>$_FILES[$file]['error'][$key],

'size'=>$_FILES[$file]['size'][$key]

);

  }

  Return $tmpfiles;

  }

 

теперь – пробегаемся по массиву и для каждого элемента вызываем существующую ранее функцию

foreach ($many_files($_FILES[‘filename’]) as $item){

File_upload($item);

}

Вот и все.

Одна маленькая функция сильно облегчит жизнь пользователю и не сильно изменит рабочую систему.

Хотите – ставьте дополнительные проверки.

Уважайте пользователей, они уделяют вашим ресурсам внимание

  • Автор: kosmom
  • Рейтинг: 0
  • Просмотров: 517
  • Комментариев: 0
  • Создан: 17.10.2012 11:43

Комментарии (0)