2015-04-02 2 views
2

У меня есть строка данных, которые я получаю из данных в моей базе данных. Я хочу, чтобы отправить его пользователю, но без создания локальной копии файла, что-то вродеScala Playframework отправить файл

Ok(MyString).as("file/csv") 

Но это не работает. Как мне это сделать?

ответ

3

Вы можете сделать это, используя 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 */) 
+0

Дa, это прекрасно – Ophelia

Смежные вопросы