Ajax uploader
Недавно понадобилось в галерее сделать аплоад. После поисков ajax uploader’a решил сделать свой.Недавно понадобилось в галерее сделать аплоад. После поисков ajax uploader’a решил сделать свой позаимствовав некоторые запчасти от Fancy Upload (Кстати только у меня его индикатор движется как то непропорционально?)
Как и Digitarald я применил mootools фреймворк.
Серверная часть позаимствована от Steve Miles ajax uploader
Требования от хостинга:
- Выполнение cgi скриптов.
- Установленный Perl.
- PHP (4 или 5)
Возможности:
- Закачивать большие файлы на сервер. ( Вы не ограничены директивами max_post_size или max_upload_size и т.п.)
- Во время загрузки файла отображается индикатор прогресса. (Также возможно отображать скорость и расчетное время конца загрузки)
- Сделать ajax аплоад опциональным. Тоесть пользователь может выбрать для себя режим загрузки.
Данный скрипт удобно применять в система где уже есть аплоад и хотелось бы сделать прогрессбар с минимумом прилагаемых усилий.
Я сделал пример на котором можно разобраться как это работает. Также этот пример можно полностью скачать со всей иерархией папок и нужными файлами.
Пример upload.tpoxa.com
Первый вариант – обычный.
<form action="postscript.php" enctype="multipart/form-data" method="post" id="myaupload">
<fieldset>
<legend>Закачайте файл</legend>
<p>
<label for="filename">Название файла</label>
<input type="text" size="40" id="filename" name="filename" />
</p>
<p>
<label for="file">Файл</label>
<input type="file" id="file" name="file" />
</p>
<p>
<input type="submit" name="goupload" />
</p>
</fieldset>
</form>
Скрипт postscript.php отображает значения суперглобальных массивов $_POST и $_FILES
Обычно мы используем функцию move_uploaded_file котороя переместит файл в папку для постоянного хранения
В случае же «аякс загрузки» это делает наш cgi скрипт который закачивает файл сначала во временное хранилище потом в любую папку которую мы укажем.
В результате postscript.php не получит никаких данных в $_FILES но зато в $_POST будет уже локальный (размещенный на сервере) адрес загружаемого файла.
В общем советую поиграться на примере.
Для того чтобы форма стала «аяксовой» нужно подключить в странице файлы аплоадера и выполнить такой код
<script type="text/javascript">
window.addEvent('domready', function() {
var UploadeManagerObj = new UploadeManager('myaupload',{});
})
</script
«myaupload» – Это ID нашей формы.
Настройка.
Настройка сводится к заливке всех файлов на сервер и установки прав на них.
Папки tmp и upload должны быть записуемыми для PHP. CHMOD 777
У /cgi-bin/upload.cgi – должны быть права для запуска CHMOD 755
Для отладки советую включить DEBUG режим при котором iframe в который «сабмитится» форма будет видим
<script type="text/javascript">
window.addEvent('domready', function() {
var UploadeManagerObj = new UploadeManager('myaupload',{debugmode:true});
})
</script
Если появятся какие вопросы с радостью отвечу.
uploader.zip
10 comments to “Ajax uploader”
Декабрь 21st, 2008 at 01:41
А как этот аплоадер работает с файлами размер которых более 2 ГБ ?
Декабрь 21st, 2008 at 11:31
Ограничие на аплоад записано в cgi файле и больше ничем не ограничено.
Декабрь 21st, 2008 at 11:58
Обновил http://upload.tpoxa.com – Оказывается он не работал.
Здесь можете испытать на больших файлах. Сейчас на тесте ограничение около 10 гб ))
Порядок установки.
Залить все файлы в корень WWW хоста (сайта)
Установить права 755 (права на запуск) файлу cgi-bin/upload.cgi
Разрешить PHP записывать в папки /tmp и /upload – установить права на них 777
Февраль 23rd, 2009 at 00:43
отличный аплоадер! спасибо! http://upload.tpoxa.com так и не работает
Февраль 25th, 2009 at 11:12
Да, с переездом забыл про этот поддомен
Февраль 25th, 2009 at 11:49
Уже работает.
Март 17th, 2009 at 18:50
Файлы с русскими именами, становятся иероглифами. Как это исправить?
Март 18th, 2009 at 01:30
Честно говоря не знаю. Я оригинально имя файла записую в базу данных а сам файл переименовую в случайное название и тоже записую в базу.
Скачивание у меня идет через скрипт…
Март 22nd, 2009 at 17:35
хотелось бы чтобы была проверка на то, выбрал ли человек файл? либо он сабмитит пустое поле file, а так же чтобы можно было задать какой тип файлов можно грузить
сообразим как это реализовать?
Июль 31st, 2009 at 19:56
че-то я запутался…Где взять переменную с именем файлы, $_POST – массив, а как его оттуда вытащить?В каком файле рыться?