Вы могли использовать HttpContext. Ответ и непосредственно пишет содержание в него (WriteFile () мог бы работать на Вас), и затем возвратите ContentResult из своего действия вместо ActionResult.
Правовая оговорка: Я не попробовал это, это основано на рассмотрении доступных API.:-)
Мне удалось найти ответ здесь . Вот код, который заставляет работать то, что я написал выше:
File.metaClass.constructor << { File arg ->
new File(arg.absolutePath)
}