我正在尝试使用 Scala 在 Play Framework 中上传多个大文件。我仍然是 scala 和菜鸟。
我得到了 some great code from here这让我完成了 90%,但现在我又卡住了。
我现在遇到的主要问题是我只能读取文件数据,不能读取已上传的任何其他数据,在查看 Play 文档后,我不清楚如何从这里获取该数据。任何建议表示赞赏!
def directUpload(projectId: String) = Secured(parse.multipartFormData(myFilePartHandler)) { implicit request =>
Ok("Done");
}
def myFilePartHandler: BodyParsers.parse.Multipart.PartHandler[MultipartFormData.FilePart[Result]] = {
parse.Multipart.handleFilePart {
case parse.Multipart.FileInfo(partName, filename, contentType) =>
println("Handling Streaming Upload:" + filename + "/" + partName + ", " + contentType);
//Set up the PipedOutputStream here, give the input stream to a worker thread
val pos: PipedOutputStream = new PipedOutputStream();
val pis: PipedInputStream = new PipedInputStream(pos);
val worker: UploadFileWorker = new UploadFileWorker(pis,contentType.get);
worker.start();
//Read content to the POS
play.api.libs.iteratee.Iteratee.fold[Array[Byte], PipedOutputStream](pos) { (os, data) =>
os.write(data)
os
}.mapDone { os =>
os.close()
worker.join()
if( worker.success )
Ok("uplaod done. Size: " + worker.size )
else
Status(503)("Upload Failed");
}
}
}
最佳答案
您必须处理数据部分。您可以猜到(或在文档中查找)处理数据部分的函数称为:handleFilePart
。
def myFilePartHandler: BodyParsers.parse.Multipart.PartHandler[MultipartFormData.FilePart[Result]] = {
parse.Multipart.handleFilePart {
// ...
}
parse.Multipart.handleFilePart {
// ...
}
}
另一种方法是 handlePart
方法。查看文档了解更多详情。
关于scala - 在playframework 2/scala中上传多个大文件和其他表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12717999/