喷雾文件上传:解组MultiPartForm

时间:2013-05-20 13:53:26

标签: scala unmarshalling spray

我正在学习Spray,使用spray-can和spray-httpx(不使用喷涂路由)来接受上传的文件。我想出了以下内容:

  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)

    ...
  }

这样可行,但我认为Multipart unmarshaller并不是以这种方式使用的。有更优雅的方式吗?

1 个答案:

答案 0 :(得分:0)

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

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