Boroda aka Hamster (fantaseour) wrote,
Boroda aka Hamster
fantaseour

Category:

Загрузка файлов в админке, подходы к решению

Захотелось осовременить диалог для закачки произвольного числа картинок, цепляемых к объекту. Сейчас у меня там тупо стоит форма с десятью полями типа файл. Больше зараз нет смысла закачивать.



Есть решение, позволяющее выделять много файлов, пользуясь одним полем формы. О бэтом пишет у себя bolk

Input multiple
Можно разрешить множественный выбор файлов с помощью такой конструкции:
<input type="file" name="input" multiple="true" />

Будет работать в ff 3.6, а также в Chrome с версии 3.0.191.0 и в Safari с версии 4.0.1.
Input multiple


Input multiple-2
Можно сделать, чтобы работало и в опере.

Опера 9.0 и выше поддерживает загрузку множества файлов в одном контроле, достаточно указать параметры min и max.
Плохие новости заключаются в том, что PHP такой запрос от Оперы разбирать не умеет.
В посте рассматривается решение с mailparse из PECL




С помощью jQuery можно динамически добавлять произвольное количество загружаемых файлов. По сути добавляются невидимые контролы для загрузки фалов, а список выбранных файлов отображается в div.

ajax загрузка нескольких файлов с php формой

Используется плагин http://www.fyneworks.com/jquery/multiple-file-upload/ для jQuery.



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

Однако, если установлен антивирус, то он может блокировать процесс загрузки файла во флеш. В таком случае нужно добавить Ваш сайт в доверенные сайты таким образом: Настройка/Защита/Вэб антивирус/Настройка/Оптимизация проверки/кнопка Выбрать/ добавьте сюда запись типа *yoursite.com*

Кроме того сессия нормально передается в ИЕ, а для остальных бруазеров идет через POST. Поэтому в скрипте, принимающем данные, необходимо идентификатор сессии забирать из $_POST

UPD Имеется также проблема при работе пользователя через прокси (особенно, если они с авторизацией). Т.е. альтернативный флешовому интерфейс нужно пользователю давать.


swfupload

Самостоятельная библиотека для такой загрузки. Стабильная, с примерами и документацией.
http://www.swfupload.org/ (демо: http://demo.swfupload.org/).

Опенсорц-MIT, много примеров для PHP

Опыт прикручивания ее к Jango:
Загрузка нескольких файлов в Django — Multifile upload Django SWFUploader

uploadify
Похожее решение, но с jQuery.
http://www.uploadify.com/

JQuery Uploadify — мультизагрузка файлов с использованием флэш

Судя по обсуждению на хабре библиотека малость глюкавее предудущей.


Имеется следующий эффект: Если на клиентской стороне работает Касперский, то загрузка каждого файла (прогрессбар) сразу показывает 100%. При отключеном касперском — нормально.

Поскольку сначала файл загружается во флеш, и только потом сохраняется на сервер. Т.е. в момент, когда градусник показывает 100% — начинается сохранение файла. Просто подождите пока файл сохранится.

Это все потому, что касперский любые файлы и письма, отправляемые во внешний инет, сразу «закачивает» на себя, говоря приложению, что все в порядке. Дальше сканит и уже после проверки доставляет адресату. Вот потому у браузера и возникает ощущение, что файл загружен: касперский ему так говорит.


Флеш-аплоад для mootools, FancyUpload
Tags: development, javascript
Subscribe

  • (no subject)

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

  • wordpress: php -> nodejs

    Хипстеры захватывают мир :) Не очень понятно, как этот переход отразится, на людях, которые ставят этот вордпресс на любой копеечный хостинг с…

  • Продолжаем разговор/java, linux, fonts

    OpenJDK считается таким пакетом, который первым делом надо заменить на нормальную Ораклиную Джаву Но в случаее с IntellJ Idea & WebStrom и т.д.…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 12 comments

  • (no subject)

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

  • wordpress: php -> nodejs

    Хипстеры захватывают мир :) Не очень понятно, как этот переход отразится, на людях, которые ставят этот вордпресс на любой копеечный хостинг с…

  • Продолжаем разговор/java, linux, fonts

    OpenJDK считается таким пакетом, который первым делом надо заменить на нормальную Ораклиную Джаву Но в случаее с IntellJ Idea & WebStrom и т.д.…