从请求中提取Spray.io Content-Type?

cro*_*ies 5 content-type scala http-headers spray

由于Spray.io是在低级别定义内容类型,我如何简单地引用传入请求的内容类型?

这是一个图像是PUT的简短示例.

      put {
        entity(as[Array[Byte]]) { data =>
          complete{
            val guid = Image.getGuid(id)
            val fileExtension = // match a file extension to content-type here
            val key = "%s-%s.%s" format (id, guid, fileExtension )
            val o = new Image(key, contentType, data)
            Image.store(o)
            val m = Map("path" -> "/client/%s/img/%s.%s" format (id, guid, fileExtension))
            HttpResponse(OK, generate(m))
          }
        }
      }
Run Code Online (Sandbox Code Playgroud)

鉴于上面的代码,提取内容类型的简单方法是什么?我可以简单地使用它来模式匹配到合适的fileExtension.谢谢你的帮助.

jru*_*lph 7

您可以构建自己的指令来提取内容类型:

val contentType = headerValuePF { case `Content-Type`(ct) => ct }

然后在你的路线中使用它:

  put {
    entity(as[Array[Byte]]) { data =>
      contentType { ct =>  // ct is instance of spray.http.ContentType
        // ...
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

编辑:如果你在每晚构建,MediaTypes已经包含文件扩展名,所以你可以使用那里的文件扩展名.在1.1-M7上,您必须按照建议提供自己的映射.