Scala Spray文件上载:解组多部分表单

Scala Spray文件上载:解组多部分表单,scala,unmarshalling,spray,Scala,Unmarshalling,Spray,我正在学习Spray,使用Spray can和Spray httpx(无Spray路由)接受上传的文件。我提出了以下建议: def receive = { ... case HttpRequest(POST, Uri.Path("/upload"), _, entity, _) => object mp extends MultipartUnmarshallers mp.MultipartFormDataUnmarshaller(entity)

我正在学习Spray,使用Spray can和Spray httpx(无Spray路由)接受上传的文件。我提出了以下建议:

  def receive = {
    ...

    case HttpRequest(POST, Uri.Path("/upload"), _, entity, _) =>
      object mp extends MultipartUnmarshallers
      mp.MultipartFormDataUnmarshaller(entity).foreach{ part =>
        for{
          fname <- part.fields.get("Filename").map(_.entity.asString)
          fbody <- part.fields.get("Filedata").map(_.entity.buffer)
        }{
          println(fname+ ": " +fbody.length)
        }       
      }
      sender ! HttpResponse(status = 200)

    ...
  }
def接收={
...
case-HttpRequest(POST,Uri.Path(“/upload”),\ux,entity,\ux)=>
对象mp扩展多端口处理器
mp.MultipartFormDataUnmarshaller(实体).foreach{part=>
为了{

fname这可能不是最优雅的,但是,它很有效

val e = spray.httpx.unmarshalling.FormDataUnmarshallers.MultipartFormDataUnmarshaller.apply(request.entity)

        e.fold(error => {
          throw new IllegalArgumentException("could not unmarshall multipart form data")
        },
          formdata => {
            for (part <- formdata.fields) {
               //do what you want with the parts
             }
          })
val e=spray.httpx.unmarshalling.FormDataUnmarshallers.MultipartFormDataUnmarshaller.apply(request.entity)
e、 折叠(错误=>{
抛出新的IllegalArgumentException(“无法解组多部分表单数据”)
},
formdata=>{
为了(部分)