4

我正在学习Spray,使用spray-can和spray-httpx(没有spray-routing)来接受上传的文件。我想出了以下几点:

  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 不应该以这种方式使用。有没有更优雅的方法呢?

4

1 回答 1

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
             }
          })
于 2017-08-03T19:56:50.433 回答