2017-05-22 18 views
0

ファイルを受信したアクタにコントローラからファイルを送信し、メタデータを抽出します。akkaと再生の間のファイル処理

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」で解決されていないタイプです。

この問題を解決するには、事前にお申し出ください。

+0

これは、このロジックを俳優に分ける良い考えではないと私は本当に思っています。本当にこれは本当に必要ですか?この論理分離の目的は何ですか? – Pavel

+0

はい、このファイルのアップロードを非同期で非ブロックにします。 – Akan

+0

なので、これは非同期コントローラメソッドで行う必要がありますか? – Pavel

答えて

1

"Part"をタイプ定義の "FilePart"に置き換えてこの問題を解決しました。

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

私は上記のように更新した後に動作しました。

問題の特定にご協力いただきありがとうございました。

関連する問題