0,1
рейтинг
21 марта 2012 в 17:16

Разработка → jQuery File Upload

Ура! Еще один, свеженький… чем он лучше других?



а) Новенький! Всегда, кто берется что-то делать, то обычно смотрит: есть ли в этом смысл, и если есть — делает это.
б) Красивенький! Можно не точить, а ставить из коробки. Основан на Bootstrap'е и иконках Glyphicons
в) Само собой мультиселект файлов, Drag&drop, прогрессбар и превьюшки фотографий.
г) Поддержка кросдоменного соединения, докачка и ресайз фоток на стороне клиента.
д) Готов для любой платформы сервера (PHP, Python, Ruby on Rails, Java, Node.js, и тому подобное.)

blueimp.github.com/jQuery-File-Upload

Поддержка браузеров:

github.com/blueimp/jQuery-File-Upload/wiki/Browser-support



Быстрое подключение



Доступно две версии плагина. В Bootstrap'е и в Jquery UI
Если вам приспичит полностью переделать интерфейс, то вот голая версия плагина

Подробнее

Как настроить плагин?


Используем jQuery File Upload (версию UI) для PHP.

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

Качаем, распаковываем, заливаем распакованное на наш сервер ( папку можно переименовывать ).
Пробуем запустить демо страницу для проверки работоспособности.

Учтите, что заливка файлов работает для всех, и эти же файлы могут быть скачаны так же всеми. Самый простой способ защиты — поставить пароль на папку с залитыми файлами через .htaccess.

Используем jQuery File Upload (версию UI) для Google App Engine

Качаем плагин, распаковываем, редактируем файл app.yaml для подмены «jquery-file-upload» на ваш собственный App ID. Заливаем в server/gae-python или server/gae-go ( в зависимости от среды разработки) как ваш App Engine instance.
Залейте папку jQuery-File-Upload (корневую) на любой сервер, после редактирования поля form action target на ваш урл к вашему App Engine instance.

Использование jQuery File Upload (версию UI) с Node.js


Вы можете установить пример на Node.js на ваш сервер через npm.
npm install blueimp-file-upload-node

Запуск сервиса:
./node_modules/blueimp-file-upload-node/server.js

Качаем архив с плагином, распаковываем, правим index.html и настраиваем путь в form action на ваш Node.js ( типа «localhost:8080»).
Вы можете залить папку с проектом ( без ненужных файлов) на любой сервер и использовать его как интерфейс для вашего сервиса по заливке файлов на Node.js.

Использование jQuery File Upload (версию UI) с другими платформами

Подробнее здесь github.com/blueimp/jQuery-File-Upload/wiki/Setup

Ps. рекомендации с комментариев


«при связке Apache+PHP нужно дать веб-серверу право на запись в папки files и thumbnails (в Ubuntu его зовут, например www-data). Для проверки на работоспособность можно просто выставить '777' на эти папки, но это потенциально небезопасный путь.

В противном случае появляется обилие UNEXPECTED TOKEN всех мастей. »
irsick
Александр Борисович @Alexufo
карма
35,5
рейтинг 0,1
тех. директор
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (118)

  • +12
    Это просто подарок какой-то для админки которую сейчас делаю с twitter bootsrap. Cпасибо!
    • +7
      Скоро все админки будут на одно лицо)
      • +3
        Да и сервисы тоже :)
  • +1
    Отлично! Также переделываю админку под twitter bootstrap и как раз искал какое-то решение для аплоада файлов. Единственное, что я сразу бы переделал — это оставил только кнопку «Add files...», а остальные показывал, если только были выбраны файлы для загрузки. И чекбокс справа от кнопки «Delete» не понятно зачем… сходу не понятно.
    • +2
      чтобы выделить все загруженные файлы
      • +1
        До этой мысли доходишь спустя некоторое время, а поначалу решительно непонятно, что делает галочка.
        • +1
          как файлы загрузил так сразу и доходит, надо ее показывать после того как есть загруженные файлы, ну выше про это и пишут
  • +2
    Определённо когда искал аплоадеры уже видел этот вариант. И он нихрена не заработал (
    Можно написать что отдаётся php-скрипту после заливки?
    • +2
      Так firebug(вкладка «сеть») или ctrl + shift + i в хроме все покажут.
      • 0
        Я не об этом. Отдаётся как обычно массив с данными о файле (файлах) или нет.
        • –1
          По сети или в PHP?
          В первом случае см. комментарий выше, во втором — отладчик или var_dump
          • 0
            В PHP. Так-то по идее $_FILES.
  • НЛО прилетело и опубликовало эту надпись здесь
    • НЛО прилетело и опубликовало эту надпись здесь
    • НЛО прилетело и опубликовало эту надпись здесь
      • +7
        Написал тупак — сиди и не жалуйся. Это лучшее, что можно сделать в данной ситуации.
        • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        А зачем плюсовать какую-то розовую животину? Пингвина или робота я бы плюсанул по приколу… Пускай и не в тему. Но это не прикольно.
        • НЛО прилетело и опубликовало эту надпись здесь
          • 0
            Отчасти я согласен, но причём здесь эта розовая животина я не понял. С чем она должна была ассоциироваться?
            • НЛО прилетело и опубликовало эту надпись здесь
              • +3
                Вы все правильно говорите, только меня бесит эта розовая мерзость, я понятия не имею что это и не хочу видеть это в блоге про веб-разработку. Это не несет никакой полезной нагрузки в контексте обсуждаемой топик стартером темы. Модные сериалы или мультики я не смотрю, мне это не интересно. и судя по количеству минусов к вашей картинке и последующим комментам я не одинок.
                • 0
                  то что в комментах это уже обсуждалось, возможно. я все комменты не читаю, и не встречал упоминания этого плагина. Да, пипл хавает, а чтож вы хотели, тут демократия. То что интересно для большинства — и будет в топе. Это нормально. И это отчасти следствие отмены денег за посты как вы говорите. И причина в редакционной политике, а не в авторе, которого вынуждают писать так текущие обстоятельства (правила, сложившаяся ситуация). Поэтому предъявлять претензии автору — не очень корректно, предъявлять претензии вам нужно владельцам хабра. А если вы не согласны с их редакционной политикой, чтож форкайте хабр как когда-то сделать денискин с веб-планетой.
  • +1
    Ох, ши… посылаю Вам сердечных благодарностей от всего отдела.
  • +2
    Прекрасная штука.
    Понравилась идея перевода русских названий на английский, но я считаю, что такое поведение некорректно, а возможности отключить это в доках не нашлось. Может быть, плохо смотрел.
    • 0
      А у меня токен какой то хочет… SyntaxError: Unexpected token <, это возникает после загрузки файла.
      • +2
        Наоборот не хочет, не ожидал он вас такой подставы, а вы ему токен. :)
        • 0
          вот что то ищу, ищу, в чем проблема и не понимаю вообще с какого перепуга он на это ругается и в каком месте возникает эта ошибка…
          • 0
            Попробовал целенаправленно сломать. Не получилось. Покажете ошибку?
          • 0
            токен это считай команда, формируемая лексером JS. Коротко говоря — в исходниках или в чем-то что выполняется лишний символ. Но это странно.
            • 0
              нашли ошибку, сервер заместо пхп скрипта отдавал корень сайта...)
      • 0
        Может еще вылезать если не выданы права на запись files и thumbnails.
  • +1
    Не новенький конечно, но крутецкий плагин
  • +2
    использовал в некоторых проектах, но ИМХО данный компонент перегружен функциями, и нет нормального туториала как эти функции почикать, чтобы оставить только то что нужно.

    И его значительно дольше кастомайзить, чем например qqFileUploader.

    А по юзабилити конечно круто.
    • 0
      Перепилил fileupload вдоль и поперек, переписал полностью fileupload ui. Ничего сложного там нет, перепиливается элементарно.
      • 0
        А я и не говорил, что трудно — просто дольше… что в принципе из Вашего коммента и следует.

        Меня смущает лишь «коробочность» данного компонента, и отсутствие напильника в этой самой коробке.
        • 0
          Там всё довольно подробно документировано.
          Не понимаю какой ещё напильник там может быть?

          А переписывал да, долго. Но я к нему ещё swfupload приделывал, да и очередь у меня не простая получилась.
          • +2
            Какой-то непонятный холивар)

            Давайте я с другой стороны объясню свой посыл.

            Вот на нескольких проектах я его использовал, мне понравилось, а в другом проекте понял, что надо закастомайзить нормально так… и потратив N времени на кастом, во время гугления наткнулся на несчастный qqFileUploader — 2 страница доки и профит получен за M времени, где M << N.

            Сорри за напильник.
            • 0
              Главная проблема так называемого повторного использования кода в том, имхо, что сначала ищешь чёрную кошку в тёмной комнате без уверенности, что она там вообще есть. А если поймал одну, то нет уверенности в том, что может есть (или нет?) и пожирнее понежнее, которая не сильно будет царапаться пока ты её напильком…

  • НЛО прилетело и опубликовало эту надпись здесь
  • +1
    Великолепно после допиливания! Буду рад увидеть от вас еще какие-нибудь подобные находки :)

    Всего наилучшего
  • 0
    В ИЕ8 мультиселекта файлов нет.
    И сервер от хабраэффекта лег.
    Рассажите как сделали ресайз на клиенте? Сколько фоток одновременно можно грузить не рискуя убить браузер? В АС3 максимум 100 фоток влазит на практике.
    • 0
      Поддерживаю вопрос, тоже интересно
    • 0
      Беглым взглядом посмотрел на пример подключения к rails, там вроде ресайз на сервере организован
    • +1
      Так никто и не обещал такой поддержки.

      IE8 (вероятно и IE9) не поддерживает мультиселект для аплоада, и вообще File API не поддерживает.
  • +2
    Это лучший аплоадер на jQuery! Использую его на нескольких проектах. Его довольно легко допилить под свои нужды, кстати.
  • +9
    Не очень понятный Грязный интерфейс, имхо.
    • Почему кнопка «cancel upload» активна до начала загрузки?
    • Почему общая кнопка называется «Cancel upload», а у каждого файла просто «Cancel»? Наверное потому, что она должна называться «Delete»? А что тогда делает «Delete» в основном блоке с кнопками?
    • И самое важное, что судя по всему в JS не обрабатываются ошибки при обращении к серверу. Сейчас сервер не доступен и это видно только по красному блоку, но кнопки при этом активны, но на нажатия никак не реагируют.
  • +3
    С полгода назад искал хороший аплоадер. Перебрал все, что только можно. В итоге остановился на plupload. Связка html5 и swf мне приглянулась. Да и управлять файлом после загрузки легко: там php файл отвечает за финиш. Использую его теперь везде, где требуется заливка.
    По поводу аплоада из хаба, демо у меня не заработало. Скачаю, посмотрю.
    • 0
      Мне он тоже нравится, использую в своих проектах. Но prupload не поддерживает, к сожалению, превью изображений. А также качество сжатия не айс…
      • 0
        Мне это не нужно. Но, думаю, дописать не проблемой будет при необходимости.
    • +1
      С swf вечно у пользователей проблемы.
    • +2
      Та же история, перебирал пару месяцев назад несколько плагинов (включая и упомянутый в статье) и остановился на plupload как самом вменяемом и удобном в работе, без лишних приблуд. Даже немного лишнего убрал и он у меня стал выглядеть так.
      Работа с ихображениями мне не требовалась. Сжатие предпочитаю делать своими средствами уже после загрузки

  • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    я так и не нашел отличий от предыдущей версии кроме добавленных иконок
  • +2
    Для Yii есть обертка xupload
    Но мне тоже показалось что «нет нормального туториала»
  • +1
    blueimp.github.com/Bootstrap-Image-Gallery/
    и вторая работа автора тоже хороша
  • 0
    Использовал в нескольких последних проектах — рекомендую, если надоели флешовые загрузчики
  • –7
    Плагин говно, в опере не работает мультивыбор.
    • +11
      Опера гавно.
    • 0
      В 12 всё работает.
      В 11.6* мультивыбор работает, но происходит ошибка в JS после загрузки первого файла.
  • –1
    отсутствующий мултиселект в ИЕ8 крайне ограничивает область применения этого аплоадера.
    • +1
      Это шутка? :)
      • 0
        нет.
        если я ничего не забыл то в Ие9 тоже мультиселекта не будет.

        • +7
          Отсутствующий мультиселект (и многое другое) сильно ограничивают область применения IE 8-9.
    • +2
      отсувствие поддержки ie8 and ie9 html5 должным образом ограничивает применение всего. У меня на работе сейчас для современных браузеров в хвост и гриву юзаются html5. Точнее собираемся зарелизить этот фунцкионал. Но ни ie8 ни ie9 не поддерживаются. UI team просто забил на них. Они обеспечивают что бы кое как работало и все. Фирма — номер1 производитель пк в мире, плюс не самый последний производитель серверов ) И мы не одиноки в таком решении. У нас стоит заглушка «использовать движок ие7» И все. Никакого ие9 нет и в планах. Это при том что на данный момент расматривается даже SPDY протокол. Пусть они сами ковыряют свое ослятину. Я конечно понимаю что это как-то не правильно… Но в глубине души радуюсь что таким образом смерть IE еще более близка. Потому что так разница в скорости будет еще более ощутима.
      • 0
        А можно для справки (хотя бы в личку), кто у нас сейчас производитель ПК №1 в мире?
  • НЛО прилетело и опубликовало эту надпись здесь
  • +2
    Отлично прижился на рельсе, очень гибко настраивается!
  • –3
    А что значит SyntaxError: JSON.parse: unexpected character?
    • 0
      разобрался. там стоял php, но был не настроен. правда сейчас только небольшие файлы передаются. 2мегабайта — ошибка 1
      ну ладно, я в принципе из любопытства поставил.
      • 0
        Ограничения в php.ini?
        • 0
          Вот это только нашел. Оно по-дефолту довольно большое:
          ; Maximum size of POST data that PHP will accept.
          post_max_size = 30M
          • 0
            Там ещё вот такое есть: upload_max_filesize
            • 0
              Да, спасибо, оно.
            • 0
              Угу, его имел в виду.
          • 0
            Это общий лимит данных, передаваемых через POST, включая все файлы. На каждый отдельный файл вам уже указали.
      • 0
        смотри ограничение на сервере
    • 0
      Вообще-то не очень очевидное сообщение. И гуглится вообще всякое разное, совсем не связанное. Так что не очень понимаю минусы.
      • 0
        Потому что не нужно гуглить это сообщение. Его нужно перевести и понять, что с сервера пришла неверная строка, которую JS пытается распарсить. После через через developers tools любого браузера посмотреть, что же такого неверного ответил сервер.
        • 0
          К сожалению слова «сервер» в сообщении нигде нет.
          • 0
            К сожалению, чтобы разрабатывать функционал загрузки файлов, нужно знать, что для этого нужна клиент-серверная архитектура ;)
            • 0
              Я не об этом. В сообщении этого нет. Я не могу быть уверен, что jq в данном моменте парсит именно вывод сервера.
              И да, это первый jq-скрипт, который я попробовал.

              Для примера, варианты сообщений, по которым можно догадаться, что именно не так:
              JSON.parse: unexpected character in server output
              JSON.server_output.parse: unexpected character
              JSON.parse(server_output): unexpected character
              Server output: JSON.parse: unexpected character
  • –1
    Как насчет IE9?
    • +7
      IE9 Это совершенно отсталый браузер. Вам внушили что он современный?
      Вот список того что он не поддерживает.
      Application Cache (offline)
      Web Workers (threads in JavaScript)
      HTML5 Forms (validation mechanism, CSS3 selectors)
      JavaScript Strict Mode
      ForeignObject (embed external content in SVG)
      SMIL Animations (SVG animations)
      File API
      WebGL (3D)
      CSS3 Transitions (for animations)
      CSS3 Text Shadow
      CSS3 Gradients
      CSS3 Border Image
      CSS3 Flex box model
      ClassList APIs
      FormData
      HTML5 History API
      Drag'n Drop from Desktop
      Поэтому, или смиритесь и используйте это в современных десктоп браузерах, либо на мобайл. Благо там никаким ие не пахнет)
      • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        Я не говорю, что IE9 прогрессивный браузер.
        Просто я уже пол года в поисках мултиаплодера, который бы работал в эксплорере (хотя не скажу, что так уж сильно искал). Никто не поддержиает. Интересно почему? Я понимаю, что IE9 не сахар, но ведь нельзя просто забить на 20% пользователей.
        • –1
          С цифрой ошиблись раза в 2
        • 0
          Uploadify
      • 0
        Насчёт ие на мобайл я бы не был столь категоричен. Особенно через год. Не то что пахнуть, а… Ну, вы поняли…
        • +1
          ну пусть сначала зарелизят да продадут, а там посмотрим, а пока это как геев в сша больше чем в мире пользователей ие 9 на мобайле.
          • 0
            За год ничего кардинально не изменится — не будут за этими планшетами стоять в очереди. Это не айдпед. Будет какой-то процент но учитывая что релиз ос аж через пол года. Ничего кардинально не поменяется. К тому же кто сказал что на винде будут пользоваться ослом а нем же хромом и фф. Тем более если сделают такой же невероятно крутой хром как для андроида. Никакие ие10 и рядом не проходили.
  • +1
    Основной интерес плагина даже не во всех эти внешних свистоперделках, а в более-менее внятном и задокументированном API, который позволяет органично встроить его в дизайн своего сайта без конфликта стилей и JS библиотек. Советую всем начинать с базового плагина.
  • +1
    Я к нему swfupload прикрутил для ишаков и он стал прекрасен.
    • +1
      Поделитесь костыликом?
  • +7
    Вот что будет, если программиста попросить сделать интерфейс.
    Загрузи четыре файла и посмотри на 12 кнопок!

    Я так понимаю, все эти превью на стороне клиента и кнопки старт/стоп нужны для того, чтобы перенести выбор файла из диалога «Open files» в браузер. А зачем? Два раза выбирать?
  • 0
    у меня вообще ошибка при загрузке «TypeError: Cannot convert 'iframe' to object» Опера 11+
  • 0
    Как-то так получилось что я как раз реализую сейчас этот плагин у себя в приложении и у меня очень не получается понять как запретить загружать больше 1 файла подряд.

    Если последовательно выбрать два или три файла подряд — и нажать submit ( add у меня переопределен и data.submit(); срабатывает только при сабмите формы ) они загрузятся все подряд, а мне нужен только 1…

    Причем, судя по всему, нативного способа очистить подобную очередь не существует. Кто может помочь?
    • 0
    • 0
      Как пишут здесь, нужно установить параметр limitMultiFileUploads, равным 1.
      • 0
        Ну тут написано:
        To limit the number of files uploaded with one XHR.
        Т.е. это ограничение не на выбор одного файла, а на отправку многих файлов одним запросом.
        • 0
          Выше по тексту идет параметр singleFileUploads, в описание пишут:

          By default, each file of a selection is uploaded using an individual request for XHR type uploads.
          Set this option to false to upload file selections in one request each.

          Note: Uploading multiple files with one request requires the multipart option to be set to true (the default).
          • 0
            Согласен. Но это даёт только то, что в диалоге нельзя выбрать много файлов с помощью Ctrl+click.

            По-прежнему можно выбрать сначала один, закрыть диалог, выбрать второй файл, третий и т.д. каждый раз закрывая диалог и все эти файлы будут загружены.
            • 0
              Значит, я не понял первоначальный вопрос. Похоже, единственный выход — сооружение костыля на базе API плагина.
              • 0
                Таки у меня не получилось… думаю это надо заметить автору и именно это я и сделал.
  • 0
    очень классная штука недавно ее интегрировал, поддерживает даже ie6
  • +2
    Буквально пару месяцев назад был в поиске удобного загрузчика файлов для своей системы управления.

    В результате написал свой: alexey.fomazov.name/projects/uploader/
    • –1
      к сожалению в ie8 не работает
    • 0
      Оно так всегда. Ищешь ищешь(ну и словосочетание), потом или пишешь свое или чужое переписываешь до неузнаваемости, и уже с него не спрыгнешь.
  • 0
    Уже около полугода у меня в форках на гитхабе валяется. Я даже и подумать не мог что кого-то на хабре может настолько заинтересовать очередной загрузчик со стилем Bootstrap. Я без негатива, просто реально удивлен.
  • 0
    Чем оно лучше или хуже Plupload? Хочется в подобных статьях увидеть некое сравнение с другими вариантами.
  • 0
    А можно, как нибудь лимитировать количество возможных загружаемых файлов?
    • 0
      maxNumberOfFiles: количество
  • 0
    .htaccess в родительскую папку example.com/upload/ начинает запрашивать пароль кучу раз.
    Однако если ставить пасс на папку /files то тогда кто угодно может посмотреть ваши файлы и что у вас там залито.

    Есть способ засекурить все это как-то? Скрипт крутой и красивый, но безопасность меня сильно волнует.
    • 0
      А так же /server/php/ сливает весь JSON кому угодно.
    • 0
      в .htaccess хапретите листинг Options All -Indexes
  • 0
    Когда-то плагин встраивал в свой проект.
    Так вот, тест в IE9 не прошел успешно. Дело не в html5 а вот в чем:
    При загрузке большого файла, после того как нажать Cancel на форме оно как бы отменяется, но на самом деле файл продолжает загружаться на сервер «в фоне»

    Как не странно IE8 таким багом не обладает…

    Сейчас перешел на qqFileUploader, и столкнулся с той же проблемой.

    Если кто сталкивался, — поделитесь решением?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.