Kotlin 无法使用Ktor提供静态内容
我尝试使用Route.static函数来提供静态文件,但它不起作用。我在我的工作目录中尝试了各种组合和文件夹。现在我在resources/static/css下有一个css,在resources/static下有index.html。如果我写了以下内容,我不会得到任何服务:Kotlin 无法使用Ktor提供静态内容,kotlin,ktor,Kotlin,Ktor,我尝试使用Route.static函数来提供静态文件,但它不起作用。我在我的工作目录中尝试了各种组合和文件夹。现在我在resources/static/css下有一个css,在resources/static下有index.html。如果我写了以下内容,我不会得到任何服务: @kotlin.jvm.JvmOverloads fun Application.module(testing: Boolean = false) { val client = HttpClient(Apache)
@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) {
val client = HttpClient(Apache) {}
routing {
static("root") {
files("css")
default("index.html")
}
}
}
然而,我可以从这个答案中写道:
然后我将在resources/static下获取index.html。然而,我不能得到任何其他东西。我做错了什么
Ref:假设您的项目位于C:\ktor项目文件夹中。如果希望Ktor服务器使用以下URL并返回下面相应文件的内容,请使用底部的代码 ->C:\ktor project\css\main.css ->C:\ktor project\index.html ->C:\ktor project\resources\static resources\styles.css
static("/root") {
files("css")
default("index.html")
resources("static-resources")
}
如果给定的styles.css文件是由Gradle构建的,那么resources(“static resources”)行可能比files(“css”)行更好。大多数情况下,您只需要其中一个。静态文件的最正确配置
static {
staticRootFolder = File(""/*or environment.rootPath)*/) // project root dir
files("static") // dir for all static files
}
在您的server.jar
文件旁边创建一个static
文件夹,并将任何内容放在那里
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)
}
}
@用户12182754我的回答对你有帮助吗?对我有用。如果我从IntelliJ IDE运行ktor项目,我会在项目根级别/static创建一个目录。在/static下,我创建了/css和/js文件夹。因此,它在调试时为静态文件提供服务。将项目导出为.jar时,无论该jar在何处启动,我都需要从项目中复制并粘贴/static文件夹。@MarkLapasa只需为自动复制静态文件夹创建任务。我已经更新了我的答案
tasks {
val copyStatic = register("copyStatic", Copy::class) {
from("$projectDir/static") {
exclude("**/*.scss", "**/*.sass", "**/*.map")
}
into("${rootProject.buildDir}/static")
}
"build" {
dependsOn(copyStatic)
dependsOn(fatJar)
}
}