【问题标题】:File handling between akka and playakka 和 play 之间的文件处理
【发布时间】: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


【解决方案1】:

我通过在类型定义中将“Part”替换为“FilePart”解决了这个问题。

case class UploadFile(billFile: MultipartFormData.FilePart[Files.TemporaryFile])

在我按照上面提到的更新后它工作了。

感谢帮助我确定问题的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多