Настройка заголовков HTTP в Play 2.0 (scala)? - PullRequest
9 голосов
/ 20 ноября 2011

Я экспериментирую с платформой Play 2.0 на Scala.Я пытаюсь выяснить, как отправить пользовательские заголовки HTTP - в данном случае «Content-Disposition: attachment; filename = foo.bar».Кажется, я не могу найти документацию о том, как это сделать (на данный момент документация по Play 2.0 в целом довольно редкая).

Есть какие-нибудь подсказки?

1 Ответ

28 голосов
/ 20 ноября 2011

Типы результатов в play.api.mvc.Results, см. здесь на GitHub.

Чтобы добавить заголовки, вы должны написать:

Ok
  .withHeaders(CONTENT_TYPE -> "application/octet-stream")
  .withHeaders(CONTENT_DISPOSITION -> "attachment; filename=foo.txt")

или

Ok.withHeaders(
  CONTENT_TYPE -> "application/octet-stream",
  CONTENT_DISPOSITION -> "attachment; filename=foo.txt"
)

А вот полный пример загрузки:

def download = Action {
  import org.apache.commons.io.IOUtils
  val input = Play.current.resourceAsStream("public/downloads/Image.png")
  input.map { is =>
    Ok(IOUtils.toByteArray(is))
      .withHeaders(CONTENT_DISPOSITION -> "attachment; filename=foo.png")
  }.getOrElse(NotFound("File not found!"))
}

Чтобы загрузить файл, Play теперь предлагает другой простой способ:

def download = Action {
  Ok.sendFile(new java.io.File("public/downloads/Image1.png"), fileName = (name) => "foo.png")
}

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

...