Pull to refresh

Comments 98

Так, а вот по этому поводу у меня есть следующая статья про, опять же, самописный jQuery плагин, служащий для ajax-upload`а файлов. Пока что анонс — для его работы не требуется Flash, только jquery + php. Если сервер поддерживает функцию uploadprogress_get_info, то включается и progress bar. Если функция отстутсвует в Вашей сборки, прогресс загрузки файла не будет отображаться.
В скором будущем — обязательно напишу о нем.
Может лучше не flash, а iframe?
Так я и говорю, что "для его работы не требуется Flash". То есть совсем ) Загрузчик как раз на iframe и работает )
Интересно, на многих shared-хотингах поддерживается uploadprogress_get_info? Я, например, про такую функцию первый раз слышу. Ведь вся прелесть данного загрузчика именно в прогресс-баре.
А Flash частенько глючит и тормозит на линухах. Я так с ним намаялся на убунте, что решил, что такую проблему легче один раз решить на сервере, чем маяться с несовместимостью у каждого клиента.
uploadprogress_get_info — очень редко, где есть, да и работает эта функция ТОЛЬКО на РНР 5.3
uploadprogress обображает прогресс для всех файлов сразу. А решение на flash'е может показать прогресс по каждому файлу и в целом.
Нет, не для всех. Ему методом POST передается уникальный идентификатор аплоада, и показывается статистика только по этой загрузке.
ок. У меня есть форма и количество прикрепляемых файлов может варьироваться. Хочу видеть статистику/прогресс загрузки по каждому из файлов и в целом.
Сорри, не прочел с первого раза «и в целом». Да, так, конечно, не получится.
Updated: загрузчик файлов добавлен )
Не, ну правильно же? Если делать — то до конца!!!
Просто эйфория и желание скорее запостить первый топик ) Прошу извинить ;) Исправимся.
Да ничё, я тоже чудил!!! ))
Не забываем про существование замечательного плагин jQuery Form ( jquery.malsup.com/form/ ), который поддерживает асинхронную закачку файлов и прочие вкусности.
Обязательно ознакомлюсь с ним ) Но сразу могу сказать, что uploader там не такой вкусный )
да при загрузке фалов был баг в опера 10, пробовал на версии jquery.form 2.28, файлы больше 1,5 мб не загружались или грузились через раз, а если загружал изображения и ещё их резал, то 100% обрубало загрузку, во всех остальных браузерах всё схватывало отлично
Получение всех данных из формы — $(«id»).serialize()
Да, с этой функцией знаком, но соль в том, что хотелось получать объект, и как-то манипулировать им перед отправкой на сервер.
serializeArray() возвращает массив объектов {name:'email',value:'xxx@xxx.xxx'}. Перебрать его в объект нужного вида не должно составлять труда. И манипулируйте на здоровье.
И эту функцию тоже видел ) Но хотелось все же просто ключ: значения. В целом, конечно, на вкус и цвет )
Тоже не так давно писал загрузчик/сабмиттер форм ( bitbucket.org/kmike/gearsuploader/ ), для работы нужен Google Gears (+mootools), если его нет — делается fall-back на обычную отправку форм. Умеет пережимать картинки на клиенте, показывать прогресс-бар при загрузке файла (изменения на серверной части не нужны), в качестве плюшки сделана интеграция с джанговскими формсетами (что позволяет делать массовую загрузку картинок с ресайзом на клиенте, не меняя код на сервере — используя там обычные formset'ы).

Но все пока не супер-продакшн качества. В ИЕ вроде не работает прогресс-бар, нужно смотреть. Кому интересно, можете потестировать. В репозитории есть пример django-проекта, хорошо бы еще php сделать) Тоже хотел про все это написать сюда на хабр с подробными инструкциями и примерами, но руки пока не доходят.
С ишаком действительно всегда много мороки. Я в своем загрузчике вроде поборол все его реинкарнации )
>>>Умеет пережимать картинки на клиенте
Не подскажете, этот функционал обеспечивается Google Gears, или чем-то другим?
Да, Gears'ом. Из-за этого функционала все и затевалось, по сути. Остальное (загрузка обычных файлов, отправка форм) — побочные эффекты.
Пожалуй стоит с этой либой поплотнее познокомиться…
Спасибо большое, именно это я и искал!
В целом мне и обычный плагин форм нравится. У меня к нему свой класс на PHP написан. Сейчас еще со Smarty его пытаюсь подружить.
Но вот загрузчик файлов я себе позаимствую, немного переработав, если вы не против =))
Для того и выкладывал ) Удачи вам разобраться с немножко сумбурным кодом загрузчика ) Хотя я его сегодня уже причесал немного) Заранее прошу прощения за отсутствие комментариев )
Кстати, насчет PHP класса для плагина )
У меня для CodeIgniter написана модель, помогающая работать с данными, полученными посредством этого плагина. Имеются следующие методы:
get — получения данных по условию
set — установить новые значения
exist — проверить, существуют ли переданные в метод ключи в этом массиве
delete — удалить указанные ключи
deleteAllBut — удалить все ключи кроме указанных
sizeOf — количество ключей в указанном подмассиве
strlen — получает список ключей, а так же интервал min и max длины строки (можно каждому ключу задать свой интервал). И возвращает true, если все ключи прошли проверку, иначе — false. Так же если передать еще один флажок, то вернет развернутый отчет — true\false по каждому ключу.
setParams — заменить текущий массив для обработки на новый
У меня формы завязаны на базу. Сначала описывается сама форма:

<?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 кусочек вынести. Я бы вообще не писал своих текстов а вызывал пользовательские функции, которые бы писали текст, если нужно.
часто делают объект settings с настройками по умолчанию, а потом делают его extend
Да, я уже тоже подумываю о выносе всех языковых строк в настройки, для мультиязычности ) Это тоже обязательно будет сделано.
мне вот интересно а как получить скорость передачи файла?
размер файла, деленный на процент переданного, деленный на время?
вы написали че-то не то, я знаю как вычисляется скорость, в данном случаи просто кол-во переданной информации деленное на время, скорость не зависит от размера файла.
во-вторых, может я неправильно выразился, но мне было интересно как получить кол-во переданной информации в данный момент
чуть выше упоминали uploadprogress_get_info, да и в коде серверной части плагина она упоминается:
function_exists(«uploadprogress_get_info»)

можно еще поискать аналоги.
Если не установлено раширение с uploadprogress_get_info, но установлено APC (что встречается), получить количество загруженного контента можно с помощью функции apc_fetch().

Пример, например, по ссылке
www.ibm.com/developerworks/library/os-php-v525/index.html
Что ж, достаточно немного модифицировать upload.php )
Расскажите пожалуйста как подключить uploadprogress_get_info
Опишите пожалуйста как его установить. Вещь нужная почти для каждого сайта.
Сам я, когда разрабатывал этот плагин, просил установить uploadprogress нашего админа. Но вот навскидку ссылка:
andyceo.ruware.com/blog/andyceo/kak-ustanovit-pecl-biblioteku-na-server-ubuntu — как установить pecl-расширение на убунту.
handynotes.ru/2007/06/pecl-php.html — а это под виндой.
К сожалению, не смогу вам помочь полноценно =\
Если не вы админите серв, попробуйте попросить его владельцев поставить это расширение.
Спасибо. Первая ссылка не работает. Хабраэффект ?)
в папке где находится pecl нужно запустить
./pecl install uploadprogress
правда до конца не поставилась через
ERROR: `phpize' failed
использую XAMPP
Всё красиво, но вот только не хватает возможности выбора и загрузки сразу нескольких файлов
Над множественным выбором обещаю подумать, как лучше реализовать )
Если еще и это реализуешь — цены тебе и твоему плагину не будет
Реализовано! При инициализации makeUpload теперь можно передать еще один параметр multi:true. Демо обновлено
UFO just landed and posted this here
Уже на вашем сервере не работает, или в демке?
UFO just landed and posted this here
Ну да, кодировка должна быть utf-8.
А как именно отрабатывает скрипт? Просто ошибка, или же он все же пишет, что отображение прогресса загрузки не поддерживается сервером?
UFO just landed and posted this here
Так может быть все же причина в том, что не стоит расширение uploadprogress для php? (http://pecl.php.net/package/uploadprogress)
UFO just landed and posted this here
Сообщение о том, что отображение прогресса не поддерживается, может быть вызвано лишь тем, что функция function_exists(«uploadprogress_get_info») возвращает false. Попробуйте в каком-нибудь левом скрипте посмотреть результат выполнения этой функции.
UFO just landed and posted this here
При таком варианте есть одна проблемка: папка tmp, куда изначально грузятся файлы, не всегда доступна. Все от хостера зависит.
UFO just landed and posted this here
Только очень уж гудение в комнате досаждает =)
UFO just landed and posted this here
Плагин обновлен. Добавлена мультизагрузка и исправлен баг при повторной загрузке файла (был неприятный глюк). Необходимо обновить upload.php и jquery.form.js
Молодцом, так быстро и качественно дополнять и исправлять! Ни каждому дано)
Откройте для себя uploadify. Флеш стоит почти у всех.
Я уже выше приводил свои аргументы, почему я против использования flash в аплоадерах.
Вчера невнимательно перезалил обновления плагина, из-за чего весь день демо, оказывается не работало. Теперь fixed )
Сейчас тоже не работает
Оп, сжатие js и css на серваке отказало. Ща отключил его к хренам. Пробуйте ;)
Загружать данные формы и файл одновременно оно умеет?
Т.е. загрузка не просто файлов, а файлов с описанием, но, условно говоря, в одном запросе?
Можно конечно, располагайте все эти элементы с одинаковым идентификатором формы.
ах да, еще
что происходит при ошибках загрузки? :)
А вот этот момент, если честно, не продуман )
нету ни демо, ни самого плагина :((
sms-uslugi.ru/habr.rar — временное решение проблемы. Тут демка и скрипт.

Ща разберусь что с тем адресом случилось.
это значит так- берем меняем библиотеку с 1.3.1 на 1.4.2 и скрипт радостно дохнет )
в get не входит вот сюда $.each(inputs,function(){
— пока не понимаю как пофиксить, но наверно у вас не то что-то с синтаксисом
извиняюсь — это не у вас проблема, а в кривом сборщике моего 1.4.2.min.js была :)
Угу ) У меня тоже с 1.4.2 все нормально робит ;)
Кстати,
я тут ещё мучался с set пока не понял что в jquery UI надо вызвать после установки ещё и рефреш
$(«имя»).buttonset(«refresh» );
Добавьте на любой репозитарий, не работает ничего. github.com. У кого есть, отпишитесь пожалуйста.
Удивительно, вы уже второй за сегодня, кто обратился за плагинчиком =)
Вот временная ссылка на js и php файл — upload.com.ua/get/901687340/
Ни одна ссылка ни не демо ни на плагин не работает.
Не могли бы Вы демку сбросить на какой нибудь файлообменник.
В смысле не только те, что скачались с временной ссылке, но и пример использования.
Спасибо
У меня, к сожалению, не сохранились примеры, я их вместе с хостингом потерял. Так что только скрипты, что по ссылке в комментарии выше, доступны. Прошу прощения
уважаемые, скиньте пожалуйста демку рабочую, у меня не получается работать с этим плагином…
Sign up to leave a comment.

Articles