2013-05-06 1 views
5

Spray.ioは低レベルでコンテンツタイプを定義しているので、着信リクエストのコンテンツタイプを単純に参照するにはどうすればよいですか?Spray.io Content-Typeをリクエストから抽出しますか?

ここでは、画像が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)) 
      } 
     } 
     } 

上記のコードを考えれば、コンテンツタイプを簡単に抽出できます。私はそれを使用して、適切なfileExtensionにパターンマッチさせることができます。ご協力いただきありがとうございます。

答えて

7

あなたは、コンテンツ・タイプを抽出するために、独自のディレクティブを構築することができ、あなたが上にある場合夜間には、MediaTypesにはすでにファイル拡張子が含まれていますので、そこからファイル拡張子を使用することができます。 1.1-M7では、提案したように独自のマッピングを提供する必要があります。

3

私はあなたがHeaderDirectivesからheaderValueディレクティブを使用することができると思う:

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

これはスプレー1.0/1.1用です。

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

、その後、あなたのルートでそれを使用します:

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

編集

+0

ありがとうございます!これは確かにヘッダーを抽出する "組み込みの"方法のようです。私は@ jrudolphのソリューションがSprayの他の抽出と同様に機能するので、より使いやすいと認めます。 – crockpotveggies

関連する問題