Xpoint
   [напомнить пароль]

Ajax загрузка файла на сервер

Метки: [без меток]
[удл]
2008-02-01 14:50:20 [обр] Александр Петров(0/4)[досье]

Здравствуйте, меня заинтересовала тема загрузки файлов на сервер без перезагрузки страницы через Ajax. Хотелось бы понять сам принцип на котором это можно построить и реализовать небольшой работающий пример. Я думаю это многим окажется полезным, разобрать возможные варианты и реализовать самый лучший. Да и чуть не забыл, обязательно нужен прогресс бар.

Я только начал изучать эту проблему, рад буду любому дельному совету. В сети много библиотек реализующих это. Задача же не сделать, а разобраться на каких принципах это можно построить.

спустя 49 минут [обр] MiRacLe(0/77)[досье]
спустя 8 минут [обр] Давид Мзареулян(0/1003)[досье]
Есть три способа:
  1. Постить форму в скрытый фрейм. Без прогресс-бара.
  2. Постить форму в скрытый фрейм и периодически опрашивать сервер, чтобы рисовать прогресс-бар. Сервер должен уметь определять процент конкретной загрузки.
  3. Флэш-загрузчик, который всё делает на клиенте и за вас. Его и рекомендую.
спустя 25 минут [обр] Nuclon(0/19)[досье]
MiRacLe[досье] это не совсем то.
Александр Петров[досье]
Смысл вот в чем - создается скрытый <iframe name="fileupload"></iframe> у формы прописывается <form target="fileupload" ...>
форме делается коммит.
прогресс бар, правда, я не уверен что получится, но попробовать можно вот так:
с помощью XMLHTTPRequest'ов можно раз в несколько секунд опрашивать сервер на предмет - сколько ж уже влилось. и, кажется, в заголовках должен быть общий размер файла.
где-то так
спустя 3 часа 3 минуты [обр] Александр Петров(0/4)[досье]
Давид Мзареулян[досье], я с флешем совсем не работал, но склоняюсь к тому что это самый прогрессивный метод. Анализировал пример на сайте http://digitarald.de/playground/uplooad.html, ну очень хорошо работает в отличии от случаев где используется просто js+php. На своем серваке восстановил пример с сайта, но там очень большая библиотека, наследование и все такое очень трудно понять и вычленить самую суть метода. Помогите пожалуйста построить работающий пример.
спустя 12 минут [обр] Давид Мзареулян(0/1003)[досье]
Вам выше дали ссылку на готовый загрузчик, там всё просто и понятно. Знание флэша вообще не нужно.
спустя 1 минуту [обр] Александр Петров(0/4)[досье]
Ладно буду ковыряться :-)
спустя 41 минуту [обр] Александр Петров(0/4)[досье]
сообщение промодерировано
Вам выше дали ссылку на готовый загрузчик, там всё просто и понятно. Знание флэша вообще не нужно.
А мне не решить проблему загрузки нужно для какого-то проекта, а узнать решение. Расставить по полочкам все. Что бы вы ни говорили, очень сложно в большой библиотеки разобраться. Суть не видна, алгоритм не полностью выстраивается, не хватает знаний по флешу. Когда он вступает в действие и как работает? В общем, нерешенного еще много.
спустя 4 часа 4 минуты [обр] MiRacLe(0/77)[досье]
сообщение промодерировано

Nuclon[досье] до вашего ответа "это не совсем то" я бы попросил вас "выпить чаю", теперь — я лишь прошу либо раскрыть должным образом свою "глубокую мысль" (почему 'не то', и чем она отличается от ответа Давида Мзареуляна[досье]), либо публично сдохнуть в муках под колёсами многотонного грузовика. (Да я знаю что публичные исходы, и желание оных исходов другим участникам не принято на этом форуме, но терпеть недалёких советчиков... это как минимум преступление перед собственной совестью ).

Александр Петров[досье]
Проект SwfUpload до отказа окружён документацией, только ленивый (или безнадёжно глупый) не разберётся в принципах его работы.

спустя 8 часов [обр] Александр Петров(0/4)[досье]
сообщение промодерировано

Вчера вечером покопался в аналогах и примерно понял как лучше это реализовать. Нужен флеш-посредник который будет взаимодействовать в обе стороны с javascript, и будет давать нам тот функционал который не может дать JS (Что-то типа dll). Осталось найти информацию как ActionScript отслеживает процент выгрузки. И в какой версии это можно отследить (неужели только в 8)?

И не надо ругаться!

спустя 55 минут [обр] Александр Петров(0/4)[досье]
Вот http://flasher.ru/forum/archive/index.php/t-78936.html кому интересно подробно описано как с помощью флеша 8 загружать файлы на сервер.
спустя 1 день 12 часов [обр] Андрей Гора(0/29)[досье]
  1. http://pecl.php.net/package/uploadprogress
Now that PHP 5.2 supports a hook that can be used to handle upload progress, you can use a PECL extension (uploadprogress) to display an upload progress meter.
  1. http://aurigma.com/
Оба софта юзаю, оба работают отлично, на обоих строятся прогрессметры, оба могут заливать файлы без перезагрузки.
спустя 1 час 49 минут [обр] Давид Мзареулян(0/1003)[досье]
Эта Ваша «ауригма» минут пять качалась на моих шести мегабитах, потом сожрала у меня всю память и повесила браузер. При второй попытке запросила какие-то расширенные полномочия на доступ к системе и была послана нафиг. Вы издеваетесь, что ли? Есть тучи лёгких (!!!) и в том числе бесплатных (!) флэш-загрузчиков, которые не строят из себя замену ОС, а просто делают свою работу — загружают файлы на сервер.
спустя 1 час 35 минут [обр] Андрей Гора(0/29)[досье]
Не, Давид, я не издеваюсь, а юзаю ее на проекте с 10.000 загрузками фото в сутки. Вы ее где юзали? Надеюсь, Вы уже знаете, что это софт с массой настроек и в кривой конфигурировании никак нельзя винить сам софт? Насчет "минут пять качалась на моих шести мегабитах" - это я даже не коментирую. А никакой флеш и близко не даст такой возможности манипулировать фотографиями при загрузке. Насчет бесплатности тоже не нужно впадать в ажиотаж, я заплатил - и имею достаточно бонусов от этого.
спустя 9 минут [обр] Давид Мзареулян(0/1003)[досье]

Я её «юзал», пройдя по Вашей ссылке, на демо-страницах. На использовании где-то ещё результаты не вдохновили.

Вообще, java-апплеты — это даже не вчерашний, а позавчерашний день интернета. Тяжёлое, глючное, унылое говно со свистульками. Я в своё время перебрал очень много вариантов подобных загрузчиков, остановился на флэш-загрузчиках и до сих пор об этом не жалею. Использую на сайте с ~1000 загрузками полноразмерных фото в сутки. Может не так круто, как Ваши десятьтыщ, зато никто не жалуется. А «манипулировать» я и на сервере прекрасно умею.

спустя 16 минут [обр] Андрей Гора(0/29)[досье]
сообщение промодерировано

Юзеру плевать на Ваш сервер, ему нужна функциональность на клиенте и флеш ее не даст.
Это просто AJAX-о подобный вариант, вариация реализации, эквивалент функциональности.

Aurigma может поставляться в дуальной версии с ActiveX.

А подростковые закидоны "Тяжёлое, глючное, унылое говно со свистульками" оставьте для своих обнаженных манекенщиц, а для остальных - это работающая технология и Вы походу оскорбляете их всех.

спустя 23 минуты [обр] Давид Мзареулян(0/1003)[досье]
сообщение промодерировано
Юзеру плевать на Ваш сервер, ему нужна функциональность на клиенте и флеш ее не даст.

Я не знаю, какая функциональность нужна Вам, но полноценные графредакторы на флэше уже довольно давно существуют.

Это просто AJAX-о подобный вариант, вариация реализации, эквивалент функциональности.

«Я знаю кон-фу, карате, джиу-джицу и много других страшных слов». AJAX тут вообще никаким боком, ну а «вариация реализации, эквивалент функциональности» — это поэтично, я оценил:)

Aurigma может поставляться в дуальной версии с ActiveX.

Прекрасно, и как это поможет моему файрфоксу?

…а для остальных - это работающая технология и Вы походу оскорбляете их всех.

Напротив, я предупреждаю тех неопытных вебмастеров, которые найдут этот тред и, чего доброго, решат, что предлагаемый Вами мегамонстр — лучшее решение задачи.

Апплеты были «работающей технологией» десять лет назад, когда кроме них вообще ничего не было. Слава богу, Сан вовремя одумалась, перенесла яву туда, где ей и место — на сервера, и перестала её пиарить как платформу для толстых клиентов. Сейчас и браузеры другие, и гораздо более прогрессивные альтернативы появились (читай — флэш). А client-side java как была бегемотом, так и осталась, и используют её только если есть наработки, а выбросить жалко… ну, или если бюджет надо освоить. По доброй воле обрекать юзера на закачку десятков мегабайт JRE, которая при каждом запуске отъедает полсистемы… ну это я не знаю, кем надо быть.

В общем, рекомендую выбросить книжки 96-го года издания и ещё раз оглядеться вокруг.

А подростковые закидоны "Тяжёлое, глючное, унылое говно со свистульками" оставьте для своих обнаженных манекенщиц…

Понравилось?:)

спустя 34 секунды [обр] Давид Мзареулян(0/1003)[досье]
Хоррроший холивар вышел:) Жаль, завтра всё потрут.
спустя 45 минут [обр] Андрей Гора(0/29)[досье]

Не потрут... побояццо! :)

Есть предложение оперировать не fuckтами, а фактами.

  1. jar-овский файл ауригмы весит аш 1 Мб, ну реально мегамонстр! Это меньше многих Ваших "полноразмерных фото". Все как раз наоборот - ауригма может уменьшать и сжимать фото на клиенте до указаного размера и компрессии, экономя и трафик клиента и ресурсы сервера. Про остальные возможности промолчу, дабы не вызвать комплекс неполноценности.
  1. Хотелось бы ссылку на полноценный flash графредактор при закачке, без подколок.
  1. http://swfupload.org/documentation/howitworks : The usage pattern for SWFUpload is more like that of an AJAX application

   Все еще не убедил? Перефразирую: по реализации - вариант, по функциональности - эквивалент.

  1. Яве и на сервере не место, но кто ж мазиле виноват, что не сделала для себя альтернативу?
  1. Если Ява работала на машинах - современниках книжек 96 года, то, возможно, с тех пор компьютеры стали малехо мощней? Ну процентов на 10% хотя бы? И есть шанс что они будут ее играть?
  1. Соответственно пользоваться несколькими браузерами под разные задачи кто-то считает ниже своего достоинства?
  1. Да
спустя 9 часов [обр] Александр Петров(0/4)[досье]
сообщение промодерировано

Мужики, зачем же так ссориться. Каждый использует то что ему нравится, все зависит от условий. Технологий много разных. Можно выбирать любые. У каждой свои достоинства и недостатки, у кого-то больше, у кого-то меньше. Не думаю что на флеше нельзя сделать то, что делает ауригма. Мне больше понравилась идея с флешем. Как я понял, ауригма это апплет, который выполняется в браузере. Если нет java машины то и выполняться ничего не будет. А флеш есть почти всегда, потому как перспективная технология. А java на клиенте, извините уж, громоздко сильно. У меня в локальной сети принтер управляется через Web интрефейс который на Java построен. Туговато работает, и это в локальной сети.

А где флеш 8 скачать, работаюший :)

спустя 21 минуту [обр] Давид Мзареулян(0/1003)[досье]

Надо же, не стёрли до сих пор:)

Андрей Гора[досье]:

  1. Упомянутый здесь SWFUpload весит 9 килобайт. Загрузчик, которым пользуюсь я (MultiPowUpload) весит 81 Кб. Это так, для сравнения. Сравнение НЕКОРРЕКТНО, поскольку Ауригма кроме загрузки много чего ещё делает. Но поскольку автор темы искал именно загрузчик, а не кухонный комбайн…

1а. А нафига мне в фотобанке сжимать изображения на клиенте? Мне это совсем не нужно, мне нужны как раз оригиналы.

  1. Вот недавно на глаза попался http://www.picnik.com/ (попался потому что они как раз открыли свой API: http://www.picnik.com/info/api). Это графический редактор на флэше. Просто для демонстрации возможностей технологии.
  1. А я думал, Вы про апплет свой…
  1. Ну… вопрос «кто виноват» — из разряда вечных, однако альтернатив сейчас достаточно и на клиенте и на сервере. Я сам Яву на сервере не люблю, однако признаю, что там она смотрится гораздо уместнее, чем в браузере.
  1. Ява тоже не стояла на месте:) а) JRE пухнет и б) по умолчанию он установлен уже далеко не на всех машинах (а это значит — качать десятки мегабайт инсталлятора непонятно во имя чего). У меня, вроде, не самый дохлый компьютер (P4-2.4/2Gb), но и он при открытии любой страницы с апплетом встаёт по стойке смирно секунд на десять. Кроме того, та же Ауригма для работы требует расширенных полномочий (чтобы к диску обращаться, очевидно) — это можно понять, однако это ещё одно препятствие для пользователей.
  1. Никто не будет пользоваться несколькими браузерами под разные задачи. Под «никто» я понимаю 90% обычных пользователей. Плюнут и уйдут.
спустя 50 минут [обр] Александр Петров(0/4)[досье]
Давид Мзареулян[досье], хорошая штука picnik. Красиво и удобно. Кому надо изображения загружать вообще прелесть.
спустя 2 часа 47 минут [обр] Давид Мзареулян(0/1003)[досье]
сообщение промодерировано
А где флеш 8 скачать, работаюший :)
Да он, вроде, на адобе вполне работающий…
спустя 28 минут [обр] Андрей Гора(0/29)[досье]

Александр Петров[досье] Aurigma кроссбраузерная.

Давид Мзареулян[досье]

Мне есть чем возразить по каждому пункту и не сомневаюсь, что у Вас найдется очередной ответ.
Факты выложены, кто захочет - сам разберется.

За MultiPowUpload спасибо, наверно его и прикручу для компании.

http://www.picnik.com штука оригинальная, и если понимать, что это не редактор, а интерфейс с командным буфером, то как онлайн фотошоп пойдет, вот только для фотохостингов в таком виде он бесполезен и чтото подсказывает мне, что создатели не отдадут в свободное пользование интерфейс, не говоря уже о бекэнде.

спустя 17 минут [обр] Давид Мзареулян(0/1003)[досье]
сообщение промодерировано
По поводу Пикника (сразу скажу, что я с ним не работал, только демо покрутил) — там внизу на странице есть список сайтов (в том числе Фликр, Фотобукет…) с которыми он работает через свой API. То есть, это как раз для фотохостингов. Бэкенд у них при этом свой, конечно, и интерфейс, думаю, тоже, но это вряд ли особо важно, если ему можно что угодно подсовывать (со своего сайта) и результат потом как угодно сохранять (на свой сайт).
спустя 9 месяцев [обр] Даниэль Алиевский(0/125)[досье]

Тема давняя, однако, если можно, внесу свои пять копеек. Давид, мне кажется, вы не учитываете одного обстоятельства. Единственный реальный и объективный минус Java-апплетов - громоздкость. Java-машина весит много, соответственно грузится и запускается долго. В силу именно этих обстоятельств Sun апплеты редки, а уже следствием этого является отсутствие "заточки" Java под апплеты, как со стороны Sun, так и со стороны сторонних разработчиков. Средства взаимодействия с броузером по-прежнему унылы и глюкавы, у меня, к примеру, апплеты систематически валят и MSIE, и FireFox (по крайней мере так было пару лет назад).

Указанный реальный и объективный минус, однако, имеет причину в высшей степени необъективную. А именно - Microsoft разругалась с Sun. Во времена MSIE 4 и встроенной в Windows Java-машины 1.1.4, которая загружалась весьма быстро, все было замечательно. Сейчас - да, проблема. Но эта проблема из тех, против которых работает время.

Посудите сами. Уже сегодня большинство продаваемых компьютеров - многоядерные, а скорости дисков достигают 100 MB/sec и более. На таком компьютере заметить торможение от загрузки JVM вряд ли удастся. Internet в России, конечно, несколько отстает, но даже в моем отсталом Екатеринбурге становятся стандартом безлимитные каналы со скоростью 1-2 мегабита. В Штатах, в Европе уже сегодня скорости выше.

Представьте себе самое ближайшее будущее. Когда у подавляющего большинства пользователей компьютеры минимум двухядерные, 20-мегабайтная JVM грузится долю секунды (маленькую долю), а скорость Internet измеряется не мегабитами, а мегабайтами в секунду. Очевидно, что размер JRE вряд ли сильно увеличится - даже такой "монстр", как Sun, не в силах удваивать объем библиотек каждый год. Более того, они уже работают над сокращением JRE, необходимого для броузера.

В этой ситуации JVM будет скачиваться столько же, сколько сейчас скачивается приличный Flash-ролик - а именно, секунды. И стартовать без видимых пауз.

А теперь обратите внимание на плюсы. Java - это ведь полноценный, универсальный язык программирования, для которого написаны терабайты библиотек, бесплатных и коммерческих, который выполняется практически со скоростью машинного языка (если оптимизатор справляется со своей работой) и который адекватно расходует память - миллион 32-битовых чисел займет 4 MB, а не чудовищные объемы, как JavaScript. Как думаете, выдержат ли конкуренцию языки типа ActionScript или JavaScript, которые изначально были разработаны для достаточно локальных целей? Я вот не уверен. Ведь совсем несложно разработать Java-библиотеки, позволяющие легко делать в плагинах то же самое, что сейчас делается во Flash. А все-таки за спиной Java стоят очень и очень солидные объемы разработок.

спустя 4 часа 35 минут [обр] Давид Мзареулян(0/1003)[досье]
Даниэль Алиевский[досье] Даниил, Ява прекрасна, но нафига она в браузере?:) Конкуренция с JS уже проиграна. Виртуальные машину JS уже вовсю оптимизируются по скорости (см. Хром, см. FF 3.1, см. беты Сафари, см. Adobe AIR, наконец). Ещё пара итераций — и скорость у них станет промышленной. Как язык JS великолепен, как платформа браузеры универсальны… чего ещё надо-то.
спустя 2 дня 21 час [обр] Даниэль Алиевский(0/125)[досье]

Давид Мзареулян[досье] Не верю :) По крайней мере, в обозримом будущем. Скриптовые языки по самому замыслу неизмеримо более мощны, чем компилируемые. Соответственно, менее эффективны и... обладают гораздо менее мощными библиотеками и прочими наработками. Даже Java и C# по-прежнему не в состоянии сообразить, что массив из миллиона классов, где каждый тривиален и сводится к двум 32-битовым целым числам, где ни один экземпляр не является наследником базового класса, а непосредственно является его экземпляром, можно (в порядке оптимизации) представить 8-мегабайтным "плоским" массивом. А сколько надо эволюционировать виртуальным машинам JavaScript или PHP, чтобы массив душераздирающе абстрактных "величин", которые могут быть целыми, вещественными или вовсе даже строковыми, в простой и естественной ситуации матрицы 1024x1024 32-битовых целых чисел занял 4 мегабайта и - в случае цикла побайтовых сравнений if (a>b) a=b - обрабатывался с применением соответствующих пакетных инструкций SSE3?

Сегодня на Java можно написать программу обработки чего угодно - от вполне красивой и профессиональной Google Earth до трехмерных моделей, которыми баловался я сам (вы, кажется, видели на algart.net). JavaScript, ActionScript и даже великий и ужасный Perl, все-таки, этого не могут. Поэтому меня до сих пор не оставляет странная мысль о том, что когда загрузка JVM станет практически бесплатной и незаметной, то в рамках этого языка начнут решаться задачи, решаемые сегодня в рамках более "легковесных" технологий. И не только они, но и гораздо больший спектр совсем новых задач.

Powered by POEM™ Engine Copyright © 2002-2005