11 января 2008 ~ 41 Комментарий

Загрузка файлов в один клик

uploadoneclick

Хочу рассказать Вам как реализовать загрузку файла в один клик без перезагрузки страницы.

Для реализации без перезагрузки мы воспользуемся моей любимой библиотекой jQuery, а также плагином к нему, с говорящим названием «One-Click Upload».

Для начала создадим кнопку для загрузки файла(upload1) и блок для отображения статуса(progress1).

<a id="upload1" href="#">Загрузите файл</a>
<span id="progress1"></span>

Теперь подключим к странице библиотеки jQuery и One-Click Upload.

После этого займемся настройкой загрузки.

$('#upload1').upload({
     name: 'file',
     method: 'post',
     enctype: 'multipart/form-data',
     action: 'upload.php',
     onSubmit: function() {
          $('#progress1').text('Загрузка файла...');
     },
     onComplete: function(data) {
          $('#progress1').text('Файл успешно загружен!');
     }
});

Теперь нам нужен обработчик самих файлов на php, вот простейший.

<?php
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['file']['name']);
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.n";
} else {
    echo "Possible file upload attack!n";
}
?>

Более расширенную документацию по данному плагину вы можете посмотреть на его страничке, ссылки прилагаются.

Вот и всё. Сегодня как-то кратко получилось, голова жутко болит, доступно хоть написал?

Посмотреть демо на блоге автора

Посмотреть документацию по плагину

41 Комментарий для “Загрузка файлов в один клик”

  1. Zeboton 11 сентября 2008 at 19:24 Permalink

    Кратко, но ясно. Спасибо, мне это как раз нужно!

    А ещё буду наглым и спрошу. Не знаете ли Вы какой-нибудь скрипт для отрисовки полосок статуса. Пример. Использовано 23% из 100% и это нужно отобразить в виде полосочки. Еще пример. Использовано 13%, зарезервировано ещё 20% и осталось, соответственно, 77% и это тоже нужно графически и в разных цветах показать.

  2. Я собственной персоной 11 сентября 2008 at 19:41 Permalink

    Кратко, но ясно. Спасибо, мне это как раз нужно!

    А ещё буду наглым и спрошу. Не знаете ли Вы какой-нибудь скрипт для отрисовки полосок статуса. Пример. Использовано 23% из 100% и это нужно отобразить в виде полосочки. Еще пример. Использовано 13%, зарезервировано ещё 20% и осталось, соответственно, 77% и это тоже нужно графически и в разных цветах показать.

    Как-то уже писал о подобном — http://chernev.ru/delaem-progress-bary.html

  3. Вадим 11 сентября 2008 at 20:09 Permalink

    Спасибо.

  4. Антон 11 сентября 2008 at 20:14 Permalink

    доступно хоть написал?

    Доступно =)

  5. Sicon 11 сентября 2008 at 20:19 Permalink

    Интересная штука

  6. Дмитрий 11 сентября 2008 at 20:54 Permalink

    У меня не работает. Пример в Опере не пашет.
    Можно поподробнее чуть?

  7. Дмитрий 11 сентября 2008 at 21:33 Permalink

    upd: Разобрался — проблема с версией jQuery.js. Была предыдущая, а с ней не работает.

  8. Артём Курапов 11 сентября 2008 at 22:10 Permalink

    А ещё есть ajaxForm

    $(‘#file_form’).ajaxForm({
    dataType: ‘html’,
    success: function(feedback) {
    $(‘#frm_file_insert [name="filename"]‘).attr(‘value’, »);
    }
    });

  9. Кир 11 сентября 2008 at 22:24 Permalink

    Как-то уже писал о подобном — http://chernev.ru/delaem-progress-bary.html

    не совсем так, что бы показывать состояние загрузки файла надо переодически получать обратно размер того, что окажеться в $_FILES['file']['tmp_name'] после полной загрузки. Насколько я знаю без cgi такое сделать не выйдет.

  10. Николай 11 сентября 2008 at 23:32 Permalink

    А как быть если вместе с файло надо еще передать данные? например id сессии… о_О

  11. Николай 12 сентября 2008 at 3:49 Permalink

    Нашел документацию, разобрался :)

  12. ano1 12 сентября 2008 at 8:37 Permalink

    Как насчёт готового примера?

  13. bukvoed 12 сентября 2008 at 11:06 Permalink

    Насколько я знаю без cgi такое сделать не выйдет.

    А через flash не пробовали?

  14. sayber 12 сентября 2008 at 16:36 Permalink

    Готовый пример на сайте автора!

  15. Кир 12 сентября 2008 at 23:24 Permalink

    Насколько я знаю без cgi такое сделать не выйдет.

    А через flash не пробовали?

    Пробывал. Правда давно, насколько я знаю недавно они что-то исправляли в безопасности, и как раз загрузки файлов это касалось. Так что про сегодня ничего не могу сказать.

  16. Кир 12 сентября 2008 at 23:29 Permalink

    Готовый пример на сайте автора!

    Пример на сайте автора сообщает о успешной загрузке даже если ничего не загружалось.

    По этой же теме. Кто-то сталкивался с загрузкой большого количества файлов. Есть ли «легальные» способ без использования хаков, своего для каждого браузера?

  17. Антон 14 сентября 2008 at 2:41 Permalink

    Просмотрев исходники могу сказать что скрипт злокачественнее, чем я думал. Раньше когда браузеры еще не поддерживали объект xmlhttp (на котором построен так называемый аякс) программисты нашли способ отправлять данные без перезагрузки другим способом:
    создавался скрытый фрейм, в котором была форма. после её манипуляции с js она свободно отправлялась (сабмитилась) и сервер выдавал результат и так как это все происходило во фрейме, а основная страница была не тронута, то просто брался этот результат и использовался дальше.
    тут тоже самое: создаеться скрытый фрейм с формой. ждал большего от этого плагина.

  18. Денис Радченко 14 сентября 2008 at 19:39 Permalink

    Спасибо за плагин

  19. Dmitriys_007 17 сентября 2008 at 4:09 Permalink

    Чет не вьехал, бред какой-то. Если поставить прямую ссылку на файл. А потом кликнуть на нее, то разве страница перезагружается? Браузер сразу открывает окно сохранения, а страница не перезагружается

  20. Dmitriys_007 17 сентября 2008 at 4:12 Permalink

    А, теперь вьехал. Говорила мне мама, читай до конца, а я начало прочел и сразу в коменты полез…

  21. UNCIA 19 сентября 2008 at 20:25 Permalink

    Великолепная статья/стати, великолепный сайт (дизайн супер!)
    Отключу на вашем сайте AdBlok(рекоммендованный вами в последней статье :)), и буду кликать по рекламе, да бы у Вас еще больше было желания писать хорошие статьи :)

  22. serjik76 25 сентября 2008 at 5:22 Permalink

    Николай где вы нашли документацию я толком разобратся не могу, мож я ламер не спорю но помогите…

  23. Диса 7 октября 2008 at 3:27 Permalink

    а знает кто, как остановить процесс после или до выбора файла?
    Мне надо при определенных условиях не давать загружаться файлу

  24. Евгений 22 декабря 2008 at 15:11 Permalink

    Вот если бы как на фликре… :)

    P.S. Что-то с вашим блогом не так.. Поиск не ищет, комментарии не оставляются (до тех пор пока не почистил куки, сайт упорно не понимал почему же я не указываю свое имя и почту)

  25. Олег 11 января 2009 at 15:14 Permalink

    Антон, насколько я знаю, с файлами по другому никак не сделаешь – только через iframe.

  26. lewile 25 января 2009 at 2:33 Permalink

    Всё сделал как сдесь описано а не пашит(

  27. Павел 27 января 2009 at 5:19 Permalink

    Очень интересное решение. Но как выдернуть ссылку из php скрипта в js?
    Хотелось бы, чтобы после успешной загрузки картинки (частный случай) js возвращал ссылку на нее. Уже больше дня мучаюсь, но не могу разобраться. Если расскажите как – отблагодарю ;)

  28. Василий 10 марта 2009 at 22:38 Permalink

    У меня в Opera 9.64 не работает (не появляется окно для выбора файла) . Версия ocupload-1.1.2 , jquery-1.2.6. Пробовал и с более новой jquery-1.3.2 – все равно не работает. Хотя на сайте автора все нормально – всплывает окно для выбора загружаемого файла.

    В мозилле все отлично…

    Кто-то сталкивался с таким? И есть ли альтернативы?

  29. Николай Ермошин 24 марта 2009 at 21:57 Permalink

    Вы не пробовали загружать несколько файлов. Реализация как на mail

  30. Александр 15 июня 2009 at 1:27 Permalink

    Возможно ли перехватить размер файла до загрузки?

  31. VICTOR_81 17 июля 2009 at 21:35 Permalink

    у меня тоже не работает в мозиле

  32. имя 22 сентября 2009 at 21:38 Permalink

    и у меня не работает. автор отстойник

  33. Владими 30 октября 2009 at 9:00 Permalink

    автор нормальный, это просто руки кривые у некоторых. Читайте внимательно.

  34. Антон 6 ноября 2009 at 19:02 Permalink

    Не знаю кто отстойник, кто нет, но у меня тоже не работает с jquery-1.3.2.min.js в мазиле…

    Хотелось бы понять почему…

    $(‘#upload1′).upload({
    name: ‘file’,
    method: ‘post’,
    enctype: ‘multipart/form-data’,
    action: ‘upload.php’,
    onSubmit: function() {
    $(‘#progress1′).text(‘Загрузка файла…’);
    },
    onComplete: function(data) {
    $(‘#progress1′).text(‘Файл успешно загружен!’);
    }
    });

    Загрузите файл

    хм…

  35. Антон 6 ноября 2009 at 19:13 Permalink

    Автор подскажите где слажал? Не я первый, не я последний :)

  36. alexpts 9 января 2010 at 19:19 Permalink

    Тоже не получается что-то… Ошибок нет, но при щелчке на элементе на который вешаем метод .upload() ничего не происходит.
    Страница с примером автора не работает, чтобы посмотреть его исходный код. Может быть вы сделаете рабочий пример, чтобы можно было посмотреть в код?

  37. Dexel 10 июня 2010 at 20:26 Permalink

    Вот что по демо-ссылке:
    The requested page couldn’t be found.

  38. kolibri 30 июля 2010 at 14:38 Permalink

    Есть и подводные камешки. Если использовать параметры, которые можно вводить в плагине, то он в форму отправки добавляет скрытые теги для их формирования. Это понятно и это правильно. Но неправильно то, что они не удаляются автоматом, а накапливаются… например если у вас 10 отправок по 5 параметров то в форме в конце появятся скрытые 50 тегов… А это ой как нехорошо…

  39. Сергей Владимирович 10 апреля 2011 at 20:32 Permalink

    >>The requested page couldn’t be found.
    И как же тогда посмотреть Demo и скачать этот плагин?

  40. Baird23Corrine 19 ноября 2011 at 13:34 Permalink

    Buildings are quite expensive and not everyone is able to buy it. But, business loans are invented to aid different people in such kind of hard situations.


Оставить комментарий