【发布时间】:2017-05-22 10:24:17
【问题描述】:
我想将文件从控制器发送给接收文件并提取元数据的参与者。
import app.model.Bill
import com.google.common.io.Files
import play.api.libs.Files.TemporaryFile
import play.api.mvc.MultipartFormData
import play.core.parsers.Multipart.FilePartHandler
//model
case class UploadFile(billFile: MultipartFormData.Part[Files.TemporaryFile])
//Controller
val fileUploadActor = ActorSystem().actorOf(Props[FileUploaderActor])
def uploadBillFile = Action(parse.multipartFormData){ implicit request =>
request.body.file("billFile").map {billFile =>
val stats = fileUploadActor ! UploadFile(billFile)
}
// Actor
class FileUploaderActor extends Actor{
override def receive: Receive = {
case UploadFile(billFile : FilePartHandler[TemporaryFile]):
val filename = billFile.filename
println("filename :" + filename)
/* implementation goes like this */
}
}
我的问题是“MultipartFormData.Part[Files.TemporaryFile]”类型没有在案例类“UploadFile”中解析以将文件传递给演员。
请提出解决方案,在此先感谢。
【问题讨论】:
-
我真的怀疑将这个逻辑分离到演员中不是一个好主意,你确定你真的需要这个吗?这种逻辑分离的目的是什么??
-
是的,我希望这个文件上传是异步且非阻塞的。
-
好吧,所以也许这需要在异步控制器方法中完成?
-
我也希望它具有可扩展性。我不确定异步控制器,因为我是新手。不能通过 akka actor 来完成吗?
-
请阅读文档,下一个链接可能是开始的好地方:playframework.com/documentation/2.5.x/ScalaAsync
标签: scala file playframework akka