Можем ли мы узнать, когда загрузка Paperclip завершена? - PullRequest
0 голосов
/ 25 января 2011

У меня есть приложение, в котором мне нужно знать, когда загрузка файла Rails / Paperclip пользователя завершена .Мое приложение настроено для взаимодействия с Amazon S3, и мне нужно запустить функцию javascript, когда пользователь получил заполненный файл.

Как я могу это сделать?

1 Ответ

3 голосов
/ 25 января 2011

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

Сначала send_file передает специальный заголовок, чтобы сообщить веб-серверу, что ему отправлять.См. документацию по send_file .Rails на самом деле вообще не отправляет файл, он устанавливает этот заголовок, который сообщает веб-серверу отправить файл, но затем немедленно возвращается и переходит к обслуживанию другого запроса.Чтобы иметь возможность отследить, завершится ли загрузка, вам придется занять процесс приложения Rails, отправляющий файл и блокируемый до тех пор, пока пользователь не загрузит его, вместо того, чтобы оставить это веб-серверу (что и предназначено для этого).Это супер неэффективно.

Далее, как вы все еще можете быть на странице для выполнения функции JavaScript, если вы загружаете файл?Ваш пользователь щелкает ссылку на скачивание файла и попадает туда, где находится файл, если он находится на send_file от Rails или перенаправлен на S3 или что-то еще, они больше не находятся на странице, с которой они пришли.Если вы думаете о том, как работает Chrome или Firefox, когда загрузка идет в диспетчер загрузок, а пользователь остается на странице, на старой странице больше нет взаимодействия с сервером!Если вы хотите, чтобы эта страница была уведомлена о завершении загрузки, вам потребуется периодическая проверка или длительный опрос сервера, чтобы узнать, завершена ли загрузка.

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

Надеюсь, что этопомогает!

...