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

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

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

person Geo    schedule 24.04.2011    source источник


Ответы (2)


Для корректности вы также можете установить contentType, чтобы браузер не пытался отображать его как text/html, если он установлен в вашем фильтре перед и в заголовке диспозиции с правильным именем. Большинство браузеров выводят имя файла из 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
}

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

person Cole Stanfield    schedule 21.06.2011
comment
Я думал, что, может быть, обработчик угадает миметип? - person Geo; 21.06.2011
comment
@Geo К сожалению, на данный момент это не так. Только что проверил с curl --head. - person Cole Stanfield; 30.06.2011

Возврат java.io.File в браузер из действия, кажется, выполняет это.

person Geo    schedule 25.04.2011