【发布时间】:2017-04-22 16:18:01
【问题描述】:
我是 Play Framework 和 Scala 的新手。我正在尝试使用 websockets 编写文件上传。我发现可以使用ByteString 来完成。但是面临的问题是我无法将响应消息保留为String。
def upload = WebSocket.accept[ByteString, String] { request =>
ActorFlow.actorRef(out => UploadActor.props(out))
}
得到的异常如下,
play.sbt.PlayExceptions$CompilationException: Compilation error[could not find implicit value for parameter transformer: play.api.mvc.WebSocket.MessageFlowTransformer[akka.util.ByteString,String]]
at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27)
at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27)
at scala.Option.map(Option.scala:145)
at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:49)
at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:44)
at scala.Option.map(Option.scala:145)
at play.sbt.run.PlayReload$.taskFailureHandler(PlayReload.scala:44)
at play.sbt.run.PlayReload$.compileFailure(PlayReload.scala:40)
at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17)
at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17)
处理websocket的Actor如下,
class UploadActor(out: ActorRef) extends Actor{
out ! "Hello"
def receive = {
case msg: ByteString => {
val p = new PrintWriter(new File("/tmp/newFile.mp4"))
p.print(msg.asByteBuffer)
p.flush()
out ! "file received"
}
case msg: String => out ! ("Got it "+ msg)
}
}
【问题讨论】:
标签: scala playframework akka playframework-2.5