Вы можете сделать это, используя chunked
с Enumerator
. Я также использовал withHeaders
, чтобы указать тип контента и расположение Result
на «вложение», чтобы клиент интерпретировал его как файл для загрузки (а не для открытия в самом браузере).
import play.api.libs.iteratee.Enumerator
val myString: String = ??? // the String you want to send as a file
Ok.chunked(Enumerator(myString.getBytes("UTF-8")).andThen(Enumerator.eof))
.withHeaders(
"Content-Type" -> "text/csv",
"Content-Disposition" -> "attachment; filename=mystring.csv"
)
Это может не скомпилировать сразу, в зависимости от типов, которые вы получаете из базы данных.
Давай думать об этом, это также должно работать (без Enumerator
):
Ok(myString).withHeaders(/* headers from above */)
Дa, это прекрасно – Ophelia