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

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

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

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

Спасибо!

2 ответа

Простейшим решением является, вероятно, 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/Пассажирские/Apache.

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


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

licensed under cc by-sa 3.0 with attribution.