Как выполнять мониторинг загрузки файлов с помощью Play! фреймворк

Можно ли контролировать загрузку файлов, как-то, с помощью Play! фреймворк? Кроме того, если файл должен быть BIG (например, + 500 МБ), можно ли сохранить полученные байты во временный файл, а не хранить его в памяти? (см. обновление ниже)

note: нет кода для показа, поскольку мне интересно эти вопросы и, похоже, не найти ответы с Google

Спасибо!

** Обновить **

(я почти забыл об этом вопросе.) Ну, apparantly, загруженные файлы хранятся во временных файлах, и файлы не передаются как массив байтов (или что-то еще), а как Java File объект для контроллера действий.

Но даже в среде RESTful мониторинг файлов может быть достигнут.

** Обновление 2 **

Есть ли способ получить ранние прослушиватели событий при входящих HTTP-запросах? Это может позволить отслеживать передачу данных запроса.

Ответ 1

Большие запросы и временные файлы

Играть! уже хранит большие HTTP-запросы в файлах temp, названных в честь UUID (таким образом уменьшая объем памяти сервера). Как только запрос будет выполнен, этот файл будет удален.

Контроль загрузки в Play!

Играть! использует (удивительный) проект Netty для своего стека HTTP-сервера (а также в стеке клиента, если вы рассматриваете Асинхронный HTTP-клиент.

Netty:

  • асинхронный
  • событийного
  • 100% HTTP

С учетом игры! стек, вы должны иметь возможность реализовать свой "индикатор выполнения загрузки" или что-то еще. На самом деле, Async HTTP-клиент уже достигает отслеживания прогресса для файлов uplaods и возобновляемой загрузки (см. краткое руководство по началу работы).

Но play.server, похоже, не предоставляет такую ​​функциональность/точку расширения.

Контроль загрузки в любом случае

Я думаю, что играть! должен находиться за "настоящим" HTTP-сервером в режиме обратного прокси (например, nginx или lighthttpd).

Итак, вам лучше использовать модуль выполнения загрузки для одного из этих серверов (например, HttpUploadProgressModule для nginx), чем возиться с Play! HTTP-стек.