Какой самый простой способ получить встроенный индикатор выполнения загрузки с использованием Ruby / Sinatra / Haml / Passenger / nginx? - PullRequest
3 голосов
/ 22 марта 2010

У меня есть веб-сайт, на котором люди могут загружать более 30 МБ данных в одном блоке, и я хочу иметь возможность показывать им ход их загрузки, не заставляя веб-страницу перестать отвечать, подобно тому, как работает флэш-загрузка в Gmail.

Здесь этот вопрос , но я не знаю, встроен ли этот индикатор на страницу или он использует индикатор выполнения браузера. Я также немного новичок в сети, поэтому я не уверен, что это «самый простой». Я спросил парней из swfupload, как это сделать здесь , и я получил ответ: «Этот инструмент требует некоторых знаний, чтобы использовать его», не оказав мне большой помощи в выяснении, с чего начать. Я также задавал этот вопрос на ServerFault , но не получил ответа, так что, возможно, это было не то место, чтобы спросить.

Я весь для изучения новых вещей и так далее, но здесь есть много потенциальных путей. С чего начать и что мне нужно знать, чтобы все работало с sinatra, haml, ruby, passenger и nginx?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 09 августа 2010

Самое простое решение - это, вероятно, Flash, но оно также и самое уродливое: как говорили некоторые люди на форуме SWFUpload, поддержка Flash в Linux вроде бы отстой, и, в конце концов, если можете, вам следует избегать ее использования.

Итак, следующее решение - использовать комбинацию серверных модулей + Javascript на клиенте.

Примечание Я уже частично ответил на ваш вопрос по ServerFault .

Для простоты я предлагаю вам перейти на Apache или Lighttpd.

Модуль на стороне сервера ( модуль процесса загрузки Apache / lighttpd mod_uploadprogress ) обрабатывает загрузку файла и предоставляет API, который можно запросить в Javascript, чтобы получить текущий прогресс.

На стороне клиента у вас есть 2 варианта (как показано в библиотеке File Uploader , которую вы не должны использовать, если не хотите модифицировать серверные модули):

  • более новые браузеры позволяют выполнять и контролировать загрузку в вызове AJAX (см. здесь )

  • практически все браузеры, старые и новые, позволяют выполнять загрузку в форме и отслеживать ее через AJAX с помощью «трюка IFrame»: поскольку загружаемая в данный момент загрузка файла препятствует запуску кода Javascript (что запрещает чтобы запросить сервер и обновить индикатор выполнения), вам нужно включить скрытый IFrame на страницу загрузки и установить действие формы для этого IFrame. Таким образом, код Javascript на «главной странице» может выполняться, пока идет загрузка.

Для Javascript на стороне клиента вы либо пишете его самостоятельно, либо можете использовать существующую библиотеку (смотрите здесь ). Ваша цель - запросить у сервера ход выполнения файла и отобразить его. Для хороших индикаторов прогресса посмотрите на jqueryUI .

В качестве последнего замечания вы можете взглянуть на мой код , я решал ту же проблему и использовал Ruby / Sinatra / Haml / Passenger / Apache.

Надеюсь, это поможет

0 голосов
/ 27 июля 2010

AFAIK, вы не можете сделать это с чистым html / javascript. Вы должны использовать Flash, Java или что-то еще для этого. Swfupload был хорошим выбором - он даст вам то, что вам нужно (я видел, как это работает), но я не могу вспомнить детали, точно знаю.

...