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

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

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";
}
?>

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

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

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

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

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

  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.

  41. Men Health Diet 25 февраля 2012 at 20:16 Permalink

    Incredible, amazing website structure! How long are you currently writing a blog with regard to? you’re making writing a blog appear effortless. The complete search of your site is excellent, plus the articles!…

  42. Denis Moisan 26 февраля 2012 at 6:11 Permalink

    I just want to tell you that I am very new to blogs and actually enjoyed your web blog. Likely I’m planning to bookmark your site . You certainly have very good posts. Thank you for sharing your blog.

  43. Best Snap and Shoot Digital Camera 26 февраля 2012 at 22:32 Permalink

    This specific truly clarified our problem, thank you!

  44. Electric Toothbrush Ratings 28 февраля 2012 at 19:20 Permalink

    The root of your writing whilst appearing reasonable originally, did not settle very well with me personally after some time. Someplace within the sentences you managed to make me a believer but just for a very short while. I nevertheless have a problem with your leaps in assumptions and you would do well to fill in those breaks. When you can accomplish that, I would definitely be impressed.

  45. Novak 29 февраля 2012 at 9:39 Permalink

    A unique discussion might be priced at comment. I believe that you should produce more on this specific topic, may well be a taboo topic but frequently people are too few to speak for such topics. To the next. Best wishes

  46. Soto 29 февраля 2012 at 11:46 Permalink

    There are some interesting points in time in this article but I don’t know if I see all of them center to heart. There is some validity but I will take hold opinion until I look into it further. Good article , thanks and we want more! Added to FeedBurner as well

  47. camescope hd sony 29 февраля 2012 at 16:14 Permalink

    Rattling nice pattern and great subject matter, nothing else we need :D.

  48. Get free WSO 29 февраля 2012 at 18:00 Permalink

    As I web site owner I believe the content material here is quite superb, thanks for your efforts.

  49. Clara 29 февраля 2012 at 21:03 Permalink

    Keep up the great work , I read few content on this site and I think that your site is really interesting and has got circles of wonderful info .

  50. disque dur ssd 29 февраля 2012 at 23:06 Permalink

    I went over this web site and I believe you have a lot of superb information, saved to my bookmarks (:.


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