Ktor服务器访问静态文件时出现404错误求助
问题排查与解决
核心问题是路径分隔符不兼容:你的代码里硬编码了Windows系统的反斜杠\\来拼接路径,但云服务器是Linux系统,默认用正斜杠/作为路径分隔符,导致拼接后的路径在Linux下变成类似/root/ktor\\uploads的无效路径,自然找不到文件返回404。
修复方案
改用跨平台的路径拼接方式,避免硬编码分隔符:
方式一:利用File类的重载构造方法,自动适配系统分隔符fun Route.staticRoutes() { val projectRoot = File(System.getProperty("user.dir")) staticFiles("/uploads/", File(projectRoot, "uploads")) }方式二:用更现代的
PathAPI构建路径import java.nio.file.Paths fun Route.staticRoutes() { val projectRoot = Paths.get(System.getProperty("user.dir")) staticFiles("/uploads/", projectRoot.resolve("uploads").toFile()) }可以在代码中添加日志,打印最终指向的路径,方便验证:
val uploadsDir = File(projectRoot, "uploads") println("静态文件目录:${uploadsDir.absolutePath}")启动jar后检查日志,确认输出路径是
/root/ktor/uploads,和实际目录一致。额外检查:确保云服务器的
uploads目录权限正确,允许应用读取文件,可执行命令chmod -R 755 ~/ktor/uploads调整权限。
内容的提问来源于stack exchange,提问作者Lakshya Sukhralia
相关产品推荐
相关产品推荐

