Untested
The Multipart
的对象BodyParsers
为我们做了很多工作。我们需要做的第一件事是为FilePart
。我假设您想要文件部分Array[Byte]
.
def handleFilePartAsByteArray: PartHandler[FilePart[Array[Byte]]] =
handleFilePart {
case FileInfo(partName, filename, contentType) =>
// simply write the data to the a ByteArrayOutputStream
Iteratee.fold[Array[Byte], ByteArrayOutputStream](
new ByteArrayOutputStream()) { (os, data) =>
os.write(data)
os
}.mapDone { os =>
os.close()
os.toByteArray
}
}
下一步是定义您的正文解析器:
def multipartFormDataAsBytes:BodyParser[MultipartFormData[Array[Byte]]] =
multipartFormData(handleFilePartAsByteArray)
然后,为了使用它,请在您指定它Action
:
def fileUploader = Action(multipartFormDataAsBytes) { request =>
request.body.files foreach {
case FilePart(key, filename, contentType, bytes) => // do something
}
Ok("done")
}
上面代码中的一些类型和方法有点难找。以下是完整的进口清单,以备您需要时使用:
import play.api.mvc.BodyParsers.parse.Multipart.PartHandler
import play.api.mvc.BodyParsers.parse.Multipart.handleFilePart
import play.api.mvc.BodyParsers.parse.Multipart.FileInfo
import play.api.mvc.BodyParsers.parse.multipartFormData
import play.api.mvc.MultipartFormData.FilePart
import play.api.libs.iteratee.Iteratee
import java.io.ByteArrayOutputStream
import play.api.mvc.BodyParser
import play.api.mvc.MultipartFormData