?

Log in

No account? Create an account
Main

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

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



Есть решение, позволяющее выделять много файлов, пользуясь одним полем формы. О бэтом пишет у себя 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

Comments

> Больше зараз нет смысла закачивать
достаточно одной заразы =)

Имхо лучше всего отправлять джаваскриптом, по одному файлу за пост. Основная сложность при этом становится разрулить логику на бэкэнде. Я пробовал делать мультизагрузку картинок, отказался от этой идеи, по крайней мере в админке, т.к. к каждой картинке нужно альт + комментарий + иногда дополнительные данные (опции выравнивания, например). Если же нужно сделать мультизагрузку на клиентской части - это делается клонированием формы, с jQuery очень просто.
для фотогалирей всякие флешой загрузчик просто песня, заказчик "писает кипятком" - от мысли что не нужно каждый джепег загружать отдельно, а просто выделить сразу десяток другой.
Это заказчику надо или пользователям?
пользователь "админки" - заказчику сайта
я и говорю - для администратора это не критично, потому что к каждой фотке нужно описание и опции показа
Сколько не делал галерей заказчику, крайне редко вставлялись подписи. Особенно если это галерея к товару. Туда просто хотят ливануть картинок без геморроя.

И это флешрешение в самый раз. Если б еще не проблемы с антивирусом.
Ок, согласен, флешрешение может быть полезно в ряде случаев, особенно если оно может (может ли?) уменьшать сверхбольшие картинки перед отправкой. Но оно не универсально, увы.

И ещё, на мой взгляд утомительность загрузки фоток по одной не в том что много раз открывается файл-опен-диалог, а в том, что много раз перезагружается страница.
пишут, что ресайзит оно плохо. Без перезагрузки страницы можно грузить и тупо поместив 10 контролов для файла или, более элегантно, через jQuery добавляя скрытые контролы, как описано у меня в посте.

Однако флешовое удобнее именно пользователю. Лепить по 10-20 картинок к объекту гораздо быстрее получается.
флэшовые решения глючат, если пользователь ходит в инет через прокси с авторизацией
Кстати да, забыл об этом написать.
Добавил апдейт, спасибо.
Я бы попробовал http://www.plupload.com/ Слежу за ними на гитхабе, очень соблазнительно.
юзаю uploadify, всем доволен :) если не держит флэш и т.п. то пользователь может грузануть по одной или сразу .zip файл