First I converted multipart form data to bytes:
def multipartFormDataAsBytes: BodyParser[MultipartFormData[Option[(Array[Byte], String, String)]]] = parse.multipartFormData(handleFilePartAsByteArray)
def handleFilePartAsByteArray: BodyParsers.parse.Multipart.PartHandler[MultipartFormData.FilePart[Option[(Array[Byte], String, String)]]] = {
parse.Multipart.handleFilePart {
case parse.Multipart.FileInfo(partName, filename, contentType) =>
Iteratee.fold[Array[Byte], ByteArrayOutputStream](
new ByteArrayOutputStream()) { (os, data) =>
os.write(data)
os
}.mapDone { os =>
os.close()
Some(os.toByteArray, filename, contentType.get)
}
}
}
In my controller method with above parser, I did this:
val params = request.body.asFormUrlEncoded
request.body.files(0).ref match {
case Some((data, fileName, contentType)) => {
//your logic here
I dont know if its the best way but it was working for me and I didnt want to spend more time on this.