Как я могу отправить файл в браузер с помощью Scalatra?

#scalatra

#scalatra

Вопрос:

Я использую scalatra-sbt-prototype. Что мне нужно изменить и где, чтобы иметь возможность обслуживать файлы из каталога в моей файловой системе? Скажем, например, я хотел бы отправить файл first.tar.gz из /home/downloads/first.tar.gz и сделать его доступным как:

 http://localhost:8080/first.tar.gz
  

Ответ №1:

Для корректности вы также можете задать ContentType, чтобы браузер не пытался отобразить его в виде текста / html, если у вас это задано в фильтре before и заголовке disposal с правильным именем. Большинство браузеров выводят имя файла из URL, но на всякий случай вы можете задать его явно.

 get("/first.tar.gz") {
    contentType = "application/octet-stream"
    val file = new java.io.File("/home/downloads/first.tar.gz")
    response.setHeader("Content-Disposition", "attachment; filename="   file.getName)
    file
}
  

Очевидно, что маршрут очень статичен, но будет делать то, что вы хотите.

Комментарии:

1. Я думал, что, возможно, обработчик угадает mimetype?

2. @Geo К сожалению, на данный момент это не так. Только что протестирован с curl --head .

Ответ №2:

Возврат java.io.File в браузер из действия, похоже, достигает этого.