我正在学习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并不是以这种方式使用的。有更优雅的方式吗?
答案 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
}
})