scala http-headers content-type spray

scala - Extraiga el tipo de contenido Spray.io de la solicitud?



http-headers content-type (2)

Creo que puedes usar la directiva HeaderDirectives desde HeaderDirectives :

import spray.http.HttpHeaders._ headerValue(_ match { case `Content-Type`(ct) => Some(ct) case _ => None }) { ct => // ct has type ContentType // other routes here }

Esto es para Spray 1.0 / 1.1.

Como Spray.io está definiendo tipos de contenido en un nivel bajo, ¿cómo simplemente hago referencia al tipo de contenido de la solicitud entrante?

Aquí hay un breve ejemplo donde se PONE una imagen.

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

Dado el código anterior, ¿cuál es una forma fácil de extraer el tipo de contenido? Simplemente puedo usar eso para emparejar patrones con una fileExtension apropiada. Gracias por tu ayuda.


Puedes construir tu propia directiva para extraer el tipo de contenido:

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

y luego úsalo en tu ruta:

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

Editar : si está en las compilaciones nocturnas, los tipos de medios ya contienen extensiones de archivo para que pueda usar los de allí. En 1.1-M7, debe proporcionar su propio mapeo como sugirió.