【问题标题】:Why is Akka-Http Routing going wrong here?为什么 Akka-Http 路由在这里出错?
【发布时间】:2019-04-15 22:55:01
【问题描述】:

所以基本上,我正在编写一些代码,让用户可以将文件上传到服务器。我已经成功通过 HTML 表单(使用 MultiPart.FormData)上传文件,但是当我尝试“curl -X POST -F file="filepath" localhost:8080/upload”时,我得到一个 '404 not found '消息。

我已经阅读了有关 Akka 的文档,但我只是不知道为什么它以一种方式工作而不是另一种工作方式。我在这里做错了什么?

val route =
  post {
    path("upload") {
      fileUpload("file") {
        case (metadata, byteSource) => 
          val sink = FileIO.toPath(Paths.get("path of the image") resolve metadata.fileName)
          val writeResult = byteSource.runWith(sink)
          onSuccess(writeResult) { _ =>
            complete("file got uploaded")
          }
      }
    }
  } ~
    complete("404 not found")

【问题讨论】:

    标签: scala akka-http


    【解决方案1】:

    您可以在path directive source 中看到它接受带有路径结尾的路径前缀。因此,如果您使用path("upload"),它将只接受以/upload/ 结尾的路径,但不接受以/upload 结尾的路径(没有路径结束符号/)。

    如果你不想同时使用/upload//upload 路径,你应该使用

    pathPrefix("upload") ~ pathEndOrSingleSlash
    

    另外,您可以使用ignoreTrailingSlash directive

    【讨论】:

    • 好奇,应该是“/upload” localhost:8080/upload 才能工作,还是之前假设有斜线?因为它是路径前缀
    • 是的,pathPrefix("upload") 匹配 "/upload" 而 path("upload") 匹配 "/upload/"
    • 这里的关键区别在于 pathPrefix 不需要路径结尾(因此它可以跟其他路径的指令)。
    • 它变得更奇怪了,因为如果我尝试 'curl -X POST -F file="filepath" localhost:8080/upload/' 或尝试 pathPrefix 解决方案,我仍然会收到 404 消息。 .
    • 你确定绑定到 localhost:8080 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多