Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 无法使用Ktor提供静态内容_Kotlin_Ktor - Fatal编程技术网

Kotlin 无法使用Ktor提供静态内容

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)

我尝试使用Route.static函数来提供静态文件,但它不起作用。我在我的工作目录中尝试了各种组合和文件夹。现在我在resources/static/css下有一个css,在resources/static下有index.html。如果我写了以下内容,我不会得到任何服务:

@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)
    }
}