Ktor 无法正确提供静态图片
Ktor not serving static images properly
我有一个 ktor 服务器,我正在尝试提供一些存储在资源文件夹 assets
.
中的静态资产
static("/assets") {
resources("assets")
}
对于 .css
文件,当我用 http://0.0.0.0:7200/assets/css/main.css 之类的东西获取它们时它可以工作,但是当我尝试使用 http://localhost:7200/assets/img/flags/uk.png 获取图像时,它 returns 一个损坏的图像,尽管它存在。
我尝试过不同的图像格式和路径。还尝试了不同的资源服务方式,但 none 奏效了。
编辑(从浏览器下载图片的开头):
编辑(原始文件的开头,为什么它们略有不同?):
终于找到问题了。跟Ktor无关,跟Gradle有关。让我解释。
我的 build.gradle.kts
文件中有此配置:
tasks.processResources {
from(sourceSets["main"].resources.srcDirs)
into("$buildDir/resources/main")
duplicatesStrategy = DuplicatesStrategy.INCLUDE
filter(
ReplaceTokens::class, "tokens" to mapOf(
"BUILD_VERSION" to version,
"BUILD_DATE" to DateTimeFormatter.ISO_DATE_TIME.format(ZonedDateTime.now()),
"BUILD_MACHINE" to InetAddress.getLocalHost().hostName
)
)
}
出于某种原因,它弄乱了图像。解决方案,只对我想要的文件应用处理,在本例中,只应用 application.conf
。所以我现在有了它,它不会破坏资源中的图像文件:
tasks.processResources {
from(sourceSets["main"].resources.srcDirs)
into("$buildDir/resources/main")
duplicatesStrategy = DuplicatesStrategy.INCLUDE
filesMatching("application.conf") {
filter(
ReplaceTokens::class, "tokens" to mapOf(
"BUILD_VERSION" to version,
"BUILD_DATE" to DateTimeFormatter.ISO_DATE_TIME.format(ZonedDateTime.now()),
"BUILD_MACHINE" to InetAddress.getLocalHost().hostName
)
)
}
}
感谢大家愿意提供帮助。
我有一个 ktor 服务器,我正在尝试提供一些存储在资源文件夹 assets
.
static("/assets") {
resources("assets")
}
对于 .css
文件,当我用 http://0.0.0.0:7200/assets/css/main.css 之类的东西获取它们时它可以工作,但是当我尝试使用 http://localhost:7200/assets/img/flags/uk.png 获取图像时,它 returns 一个损坏的图像,尽管它存在。
我尝试过不同的图像格式和路径。还尝试了不同的资源服务方式,但 none 奏效了。
编辑(从浏览器下载图片的开头):
编辑(原始文件的开头,为什么它们略有不同?):
终于找到问题了。跟Ktor无关,跟Gradle有关。让我解释。
我的 build.gradle.kts
文件中有此配置:
tasks.processResources {
from(sourceSets["main"].resources.srcDirs)
into("$buildDir/resources/main")
duplicatesStrategy = DuplicatesStrategy.INCLUDE
filter(
ReplaceTokens::class, "tokens" to mapOf(
"BUILD_VERSION" to version,
"BUILD_DATE" to DateTimeFormatter.ISO_DATE_TIME.format(ZonedDateTime.now()),
"BUILD_MACHINE" to InetAddress.getLocalHost().hostName
)
)
}
出于某种原因,它弄乱了图像。解决方案,只对我想要的文件应用处理,在本例中,只应用 application.conf
。所以我现在有了它,它不会破坏资源中的图像文件:
tasks.processResources {
from(sourceSets["main"].resources.srcDirs)
into("$buildDir/resources/main")
duplicatesStrategy = DuplicatesStrategy.INCLUDE
filesMatching("application.conf") {
filter(
ReplaceTokens::class, "tokens" to mapOf(
"BUILD_VERSION" to version,
"BUILD_DATE" to DateTimeFormatter.ISO_DATE_TIME.format(ZonedDateTime.now()),
"BUILD_MACHINE" to InetAddress.getLocalHost().hostName
)
)
}
}
感谢大家愿意提供帮助。