Comments 98
А что, файл нельзя отправить?
Так, а вот по этому поводу у меня есть следующая статья про, опять же, самописный jQuery плагин, служащий для ajax-upload`а файлов. Пока что анонс — для его работы не требуется Flash, только jquery + php. Если сервер поддерживает функцию uploadprogress_get_info, то включается и progress bar. Если функция отстутсвует в Вашей сборки, прогресс загрузки файла не будет отображаться.
В скором будущем — обязательно напишу о нем.
В скором будущем — обязательно напишу о нем.
Может лучше не flash, а iframe?
Интересно, на многих shared-хотингах поддерживается uploadprogress_get_info? Я, например, про такую функцию первый раз слышу. Ведь вся прелесть данного загрузчика именно в прогресс-баре.
uploadprogress обображает прогресс для всех файлов сразу. А решение на flash'е может показать прогресс по каждому файлу и в целом.
Нет, не для всех. Ему методом POST передается уникальный идентификатор аплоада, и показывается статистика только по этой загрузке.
Updated: загрузчик файлов добавлен )
И правда, как дела с type=«file»?
Не, ну правильно же? Если делать — то до конца!!!
Не забываем про существование замечательного плагин jQuery Form ( jquery.malsup.com/form/ ), который поддерживает асинхронную закачку файлов и прочие вкусности.
Обязательно ознакомлюсь с ним ) Но сразу могу сказать, что uploader там не такой вкусный )
Получение всех данных из формы — $(«id»).serialize()
Да, с этой функцией знаком, но соль в том, что хотелось получать объект, и как-то манипулировать им перед отправкой на сервер.
Тоже не так давно писал загрузчик/сабмиттер форм ( bitbucket.org/kmike/gearsuploader/ ), для работы нужен Google Gears (+mootools), если его нет — делается fall-back на обычную отправку форм. Умеет пережимать картинки на клиенте, показывать прогресс-бар при загрузке файла (изменения на серверной части не нужны), в качестве плюшки сделана интеграция с джанговскими формсетами (что позволяет делать массовую загрузку картинок с ресайзом на клиенте, не меняя код на сервере — используя там обычные formset'ы).
Но все пока не супер-продакшн качества. В ИЕ вроде не работает прогресс-бар, нужно смотреть. Кому интересно, можете потестировать. В репозитории есть пример django-проекта, хорошо бы еще php сделать) Тоже хотел про все это написать сюда на хабр с подробными инструкциями и примерами, но руки пока не доходят.
Но все пока не супер-продакшн качества. В ИЕ вроде не работает прогресс-бар, нужно смотреть. Кому интересно, можете потестировать. В репозитории есть пример django-проекта, хорошо бы еще php сделать) Тоже хотел про все это написать сюда на хабр с подробными инструкциями и примерами, но руки пока не доходят.
да, немного документации: bitbucket.org/kmike/gearsuploader/wiki/ru
С ишаком действительно всегда много мороки. Я в своем загрузчике вроде поборол все его реинкарнации )
>>>Умеет пережимать картинки на клиенте
Не подскажете, этот функционал обеспечивается Google Gears, или чем-то другим?
>>>Умеет пережимать картинки на клиенте
Не подскажете, этот функционал обеспечивается Google Gears, или чем-то другим?
молодцом, смотрится на 5.
Спасибо большое, именно это я и искал!
В целом мне и обычный плагин форм нравится. У меня к нему свой класс на PHP написан. Сейчас еще со Smarty его пытаюсь подружить.
Но вот загрузчик файлов я себе позаимствую, немного переработав, если вы не против =))
Но вот загрузчик файлов я себе позаимствую, немного переработав, если вы не против =))
Для того и выкладывал ) Удачи вам разобраться с немножко сумбурным кодом загрузчика ) Хотя я его сегодня уже причесал немного) Заранее прошу прощения за отсутствие комментариев )
Кстати, насчет PHP класса для плагина )
У меня для CodeIgniter написана модель, помогающая работать с данными, полученными посредством этого плагина. Имеются следующие методы:
get — получения данных по условию
set — установить новые значения
exist — проверить, существуют ли переданные в метод ключи в этом массиве
delete — удалить указанные ключи
deleteAllBut — удалить все ключи кроме указанных
sizeOf — количество ключей в указанном подмассиве
strlen — получает список ключей, а так же интервал min и max длины строки (можно каждому ключу задать свой интервал). И возвращает true, если все ключи прошли проверку, иначе — false. Так же если передать еще один флажок, то вернет развернутый отчет — true\false по каждому ключу.
setParams — заменить текущий массив для обработки на новый
У меня для CodeIgniter написана модель, помогающая работать с данными, полученными посредством этого плагина. Имеются следующие методы:
get — получения данных по условию
set — установить новые значения
exist — проверить, существуют ли переданные в метод ключи в этом массиве
delete — удалить указанные ключи
deleteAllBut — удалить все ключи кроме указанных
sizeOf — количество ключей в указанном подмассиве
strlen — получает список ключей, а так же интервал min и max длины строки (можно каждому ключу задать свой интервал). И возвращает true, если все ключи прошли проверку, иначе — false. Так же если передать еще один флажок, то вернет развернутый отчет — true\false по каждому ключу.
setParams — заменить текущий массив для обработки на новый
У меня формы завязаны на базу. Сначала описывается сама форма:
Поля, соответствующие таблице могут писаться в базу. В соответствии с ним происходит обработка в JS при вводе информации в фронтэнде и при сохранении в бакенде. отправка происходит через формы JQuery, если включен JS или как обычно, если выключен.
Есть реализация интеграции с Jquery-UI.
Так еще доступны типы int, float, select, radio и некоторые другие.
Сейчас доступны методы:
create() — создание формы (см. выше)
getForm( 'formname' ) — вернет описание формы, как массив выше
clear() — очистит значения value у полей
getPost() — дёрнет из поста соответствующие полям индексы (нужно, когда считывает отправленные данные, этот же метод производит чистку данных по типам)
setTable() — сохранит данные в таблицу БД
getTable() — загрузит данные из таблицы БД
getValue() — получить значение поля
getValues() — получить значения всех полей
setValue() — установить значение поля
setValues() — установить значения всех полей
setVariants() — установить варианты для полей select, radio и checkbox (порой надо, чтобы эти значения заполнялись динамически из базы, например)
write() — распечатает форму в автоматическом режиме (есть несколько вариантов)
setReadonly() — утановить поле в readonly (также может отменить readonly)
setRaedonlyAll() — установить все поля в readonly (также может отменить readonly)
setHidden() — делает некоторые поля скрытыми/не скрытыми
setTypes() — можно для некоторых полей поменять тип
Как-то так.
<?php /** * Форма USERS */ $forms->create('users', array( 'method' => 'post', // метод отправки 'action' => '/ajax/xforms/action_users.php', // скрипт обработки 'class' => 'standart', // CSS класс 'table' => DBUSERS, // таблица БД 'fields' => array( 'id' => array( 'type' => 'hidden' ), 'email' => array( 'type' => 'text', 'label' => 'Email', 'notice' => 'необходим для авторизации' ), 'password' => array( 'type' => 'password', 'label' => 'Пароль', 'notice' => 'только чтобы изменить' ), 'solt' => array( 'type' => 'hidden' ), 'kod' => array( 'type' => 'hidden' ), 'fname' => array( 'type' => 'text', 'label' => 'Фамилия' ), 'lname' => array( 'type' => 'text', 'label' => '* Имя'/*, 'obligatory' => 1*/ ), 'tname' => array( 'type' => 'text', 'label' => 'Отчество' ), 'phone1' => array( 'type' => 'text', 'label' => 'Телефон' ), 'phone2' => array( 'type' => 'text', 'label' => 'Факс' ), 'phone3' => array( 'type' => 'text', 'label' => 'Мобильный' ), 'firm_value' => array( // no DB 'type' => 'suggest', 'label' => '* Фирма', 'ajax' => '/ajax/suggest/sug_users_firms.php', 'field_value' => 'firm', ), 'firm' => array( 'type'=>'hidden' ), 'contr_value' => array( // no DB 'type' => 'suggest', 'label' => 'Контрагент', 'ajax' => '/ajax/suggest/sug_users_contr.php', 'field_value' => 'contractor', ), 'contractor' => array( 'type' => 'hidden' ), 'position' => array( 'type' => 'text', 'label' => 'Должность' ), // должность 'otdel' => array( 'type' => 'text', 'label' => 'Отдел' ), 'other' => array( 'type' => 'textarea', 'label' => 'Дополнительно' ), 'date' => array( 'type' => 'hidden' ), 'last_date' => array( 'type' => 'hidden' ), 'ip' => array( 'type' => 'hidden' ), 'fix_ip' => array( 'type' => 'hidden' ), 'status' => array( 'type' => 'hidden', 'label' => '' ), 'submit' => array( 'type' => 'submit', 'value' => 'Сохранить' ), ), )); ?>
Поля, соответствующие таблице могут писаться в базу. В соответствии с ним происходит обработка в JS при вводе информации в фронтэнде и при сохранении в бакенде. отправка происходит через формы JQuery, если включен JS или как обычно, если выключен.
Есть реализация интеграции с Jquery-UI.
Так еще доступны типы int, float, select, radio и некоторые другие.
Сейчас доступны методы:
create() — создание формы (см. выше)
getForm( 'formname' ) — вернет описание формы, как массив выше
clear() — очистит значения value у полей
getPost() — дёрнет из поста соответствующие полям индексы (нужно, когда считывает отправленные данные, этот же метод производит чистку данных по типам)
setTable() — сохранит данные в таблицу БД
getTable() — загрузит данные из таблицы БД
getValue() — получить значение поля
getValues() — получить значения всех полей
setValue() — установить значение поля
setValues() — установить значения всех полей
setVariants() — установить варианты для полей select, radio и checkbox (порой надо, чтобы эти значения заполнялись динамически из базы, например)
write() — распечатает форму в автоматическом режиме (есть несколько вариантов)
setReadonly() — утановить поле в readonly (также может отменить readonly)
setRaedonlyAll() — установить все поля в readonly (также может отменить readonly)
setHidden() — делает некоторые поля скрытыми/не скрытыми
setTypes() — можно для некоторых полей поменять тип
Как-то так.
Из селекта созвращаются только названия полей, а их values нет.
У вас много «зашитого» html кода внутри плагина — это не найс (например: «Загрузка началась. Пожалуйста, подождите...», там много такого). Можно все служебные тексты в отдельный json кусочек вынести. Я бы вообще не писал своих текстов а вызывал пользовательские функции, которые бы писали текст, если нужно.
мне вот интересно а как получить скорость передачи файла?
размер файла, деленный на процент переданного, деленный на время?
вы написали че-то не то, я знаю как вычисляется скорость, в данном случаи просто кол-во переданной информации деленное на время, скорость не зависит от размера файла.
во-вторых, может я неправильно выразился, но мне было интересно как получить кол-во переданной информации в данный момент
во-вторых, может я неправильно выразился, но мне было интересно как получить кол-во переданной информации в данный момент
чуть выше упоминали uploadprogress_get_info, да и в коде серверной части плагина она упоминается:
можно еще поискать аналоги.
function_exists(«uploadprogress_get_info»)
можно еще поискать аналоги.
Если не установлено раширение с uploadprogress_get_info, но установлено APC (что встречается), получить количество загруженного контента можно с помощью функции apc_fetch().
Пример, например, по ссылке
www.ibm.com/developerworks/library/os-php-v525/index.html
Пример, например, по ссылке
www.ibm.com/developerworks/library/os-php-v525/index.html
Расскажите пожалуйста как подключить uploadprogress_get_info
pecl.php.net/package/uploadprogress — вот ссыль на это расширение.
Опишите пожалуйста как его установить. Вещь нужная почти для каждого сайта.
Сам я, когда разрабатывал этот плагин, просил установить uploadprogress нашего админа. Но вот навскидку ссылка:
andyceo.ruware.com/blog/andyceo/kak-ustanovit-pecl-biblioteku-na-server-ubuntu — как установить pecl-расширение на убунту.
handynotes.ru/2007/06/pecl-php.html — а это под виндой.
К сожалению, не смогу вам помочь полноценно =\
Если не вы админите серв, попробуйте попросить его владельцев поставить это расширение.
andyceo.ruware.com/blog/andyceo/kak-ustanovit-pecl-biblioteku-na-server-ubuntu — как установить pecl-расширение на убунту.
handynotes.ru/2007/06/pecl-php.html — а это под виндой.
К сожалению, не смогу вам помочь полноценно =\
Если не вы админите серв, попробуйте попросить его владельцев поставить это расширение.
Всё красиво, но вот только не хватает возможности выбора и загрузки сразу нескольких файлов
Уже на вашем сервере не работает, или в демке?
Ну да, кодировка должна быть utf-8.
А как именно отрабатывает скрипт? Просто ошибка, или же он все же пишет, что отображение прогресса загрузки не поддерживается сервером?
А как именно отрабатывает скрипт? Просто ошибка, или же он все же пишет, что отображение прогресса загрузки не поддерживается сервером?
Так может быть все же причина в том, что не стоит расширение uploadprogress для php? (http://pecl.php.net/package/uploadprogress)
Сообщение о том, что отображение прогресса не поддерживается, может быть вызвано лишь тем, что функция function_exists(«uploadprogress_get_info») возвращает false. Попробуйте в каком-нибудь левом скрипте посмотреть результат выполнения этой функции.
Плагин обновлен. Добавлена мультизагрузка и исправлен баг при повторной загрузке файла (был неприятный глюк). Необходимо обновить upload.php и jquery.form.js
Откройте для себя uploadify. Флеш стоит почти у всех.
Вчера невнимательно перезалил обновления плагина, из-за чего весь день демо, оказывается не работало. Теперь fixed )
Сейчас тоже не работает
Оп, сжатие js и css на серваке отказало. Ща отключил его к хренам. Пробуйте ;)
Загружать данные формы и файл одновременно оно умеет?
Т.е. загрузка не просто файлов, а файлов с описанием, но, условно говоря, в одном запросе?
Т.е. загрузка не просто файлов, а файлов с описанием, но, условно говоря, в одном запросе?
ах да, еще
что происходит при ошибках загрузки? :)
что происходит при ошибках загрузки? :)
нету ни демо, ни самого плагина :((
sms-uslugi.ru/habr.rar — временное решение проблемы. Тут демка и скрипт.
Ща разберусь что с тем адресом случилось.
Ща разберусь что с тем адресом случилось.
это значит так- берем меняем библиотеку с 1.3.1 на 1.4.2 и скрипт радостно дохнет )
в get не входит вот сюда $.each(inputs,function(){
— пока не понимаю как пофиксить, но наверно у вас не то что-то с синтаксисом
в get не входит вот сюда $.each(inputs,function(){
— пока не понимаю как пофиксить, но наверно у вас не то что-то с синтаксисом
Добавьте на любой репозитарий, не работает ничего. github.com. У кого есть, отпишитесь пожалуйста.
Удивительно, вы уже второй за сегодня, кто обратился за плагинчиком =)
Вот временная ссылка на js и php файл — upload.com.ua/get/901687340/
Вот временная ссылка на js и php файл — upload.com.ua/get/901687340/
Ни одна ссылка ни не демо ни на плагин не работает.
Не могли бы Вы демку сбросить на какой нибудь файлообменник.
В смысле не только те, что скачались с временной ссылке, но и пример использования.
Спасибо
Не могли бы Вы демку сбросить на какой нибудь файлообменник.
В смысле не только те, что скачались с временной ссылке, но и пример использования.
Спасибо
И на том спасибо. Разберемся.
уважаемые, скиньте пожалуйста демку рабочую, у меня не получается работать с этим плагином…
В общем пока разбирался нашел схожее решение только без upload'а файлов.
Может кому пригодиться — www.linkexchanger.su/2008/45.html
Может кому пригодиться — www.linkexchanger.su/2008/45.html
Sign up to leave a comment.
jQuery плагин для получения данных формы + ajax аплоадер файлов