Не может обслуживать статический контент с помощью Ktor

Я пытаюсь использовать функцию Route.static для обслуживания статических файлов, но она не работает. Я перепробовал всевозможные комбинации и папки в своем рабочем каталоге. Теперь у меня есть css в разделе resources / static / css и index.html в разделе resources / static. Если я напишу следующее, мне ничего не подадут:

@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) {

    val client = HttpClient(Apache) {}

    routing {
      static("root") {
        files("css")
        default("index.html")
      }
   }
}

Однако я могу из этого ответа: Ktor - маршрутизация статического содержимого написать:

        resource("/", "index.html")
        resource("*", "index.html")

Тогда я получу index.html в разделе resources / static. Однако я не могу получить ничего другого. Что я здесь делаю не так?

Ссылка: https://ktor.io/servers/features/static-content.html#specifying-files-and-folders


person user12182754    schedule 14.03.2020    source источник


Ответы (2)


Самая правильная конфигурация для статических файлов

static {
    staticRootFolder = File(""/*or environment.rootPath)*/) // project root dir
    files("static") // dir for all static files
}

Создайте папку static рядом с вашим server.jar файлом и поместите туда все, что угодно.

https://example.com/file.txt
https://example.com/css/style.css
https://example.com/images/image.png

Дополнительно:

tasks {
    val copyStatic = register("copyStatic", Copy::class) {
        from("$projectDir/static") {
            exclude("**/*.scss", "**/*.sass", "**/*.map")
        }
        into("${rootProject.buildDir}/static")
    }
    "build" {
        dependsOn(copyStatic)
        dependsOn(fatJar)
    }
}
person Сергей    schedule 14.08.2020
comment
Работал у меня. Если я запускаю проект ktor из IntelliJ IDE, я создал каталог на корневом уровне проекта / static. В / static я создал папки / css и / js. Таким образом, при отладке он обслуживает статические файлы. При экспорте проекта в формате .jar, где бы этот jar ни был запущен, мне нужно скопировать и вставить папку / static из проекта. - person Mark Lapasa; 02.09.2020
comment
@MarkLapasa просто создайте задачу для автоматического копирования статической папки. Я обновил свой ответ - person Сергей; 04.09.2020

Предположим, у вас есть проект в папке C: \ ktor-project. Если вы хотите, чтобы ваш сервер Ktor использовал следующие URL-адреса и возвращал содержимое соответствующих файлов ниже, используйте код внизу.

http://localhost:8080/root/main.css -> C: \ ktor- проект \ css \ main.css http://localhost:8080/root -> C: \ ktor-project \ index.html http://localhost:8080/root/styles.css -> C : \ ктор-проект \ ресурсы \ статические ресурсы \ стили.css

static("/root") {
    files("css")
    default("index.html")
    resources("static-resources")
}

Строка resources ("static-resources") может быть лучшим выбором, чем строка files ("css"), если данный файл styles.css создается вашей сборкой Gradle. В большинстве случаев вам понадобится только один из них.

person jseteny    schedule 26.04.2020
comment
@ user12182754 Мой ответ вам помог? - person jseteny; 25.05.2020