4

次のコードを使用して、Play 2.1 で reactmongo を使用して添付ファイルを保存しようとしています:

def upload = Action(parse.multipartFormData) { request =>
    request.body.file("carPicture").map { picture =>
    val filename = picture.filename
    val contentType = picture.contentType

    val gridFS = new GridFS(db, "attachments")
    val fileToSave = DefaultFileToSave(filename, contentType)

    val futureResult: Future[ReadFile[BSONValue]] = gridFS.writeFromInputStream(fileToSave, new FileInputStream(new File(filename)))

    Ok(Json.obj("e" -> 0))
  }.getOrElse {
    Redirect(routes.Application.index).flashing(
      "error" -> "Missing file"
    )
  }
}

次のエラーが表示されます。

パラメータ readFileReader の暗黙の値が見つかりませんでした: reactmongo.bson.BSONDocumentReader[reactivemongo.api.gridfs.ReadFile[reactivemongo.bson.BSONValue]] [エラー] val futureResult: Future[ReadFile[BSONValue]] = gridFS.writeFromInputStream(fileToSave, new FileInputStream(new File(ファイル名)))

私は何が欠けていますか?

ありがとう、

GA

4

1 に答える 1

5

ほとんどの場合、スコープ内に DefaultReadFileReader 暗黙オブジェクトがありません。これは、インポートを追加することで修正できます。

import reactivemongo.api.gridfs.Implicits._

以下は私にとっては問題なくコンパイルされます(Play 2.1のreactivemongoモジュール、バージョン0.9を使用):

package controllers

import java.io.{ File, FileInputStream }
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future

import play.api._
import play.api.mvc._
import play.api.libs.json._

import reactivemongo.api._
import reactivemongo.bson._
import reactivemongo.api.gridfs._
import reactivemongo.api.gridfs.Implicits._

import play.modules.reactivemongo.MongoController


object Application extends Controller with MongoController {

  def index = Action {
    Ok(views.html.index("Hello, world..."))
  }

  def upload = Action(parse.multipartFormData) { request =>
    request.body.file("carPicture").map { picture =>
      val filename = picture.filename
      val contentType = picture.contentType

      val gridFS = new GridFS(db, "attachments")
      val fileToSave = DefaultFileToSave(filename, contentType)

      val futureResult: Future[ReadFile[BSONValue]] = gridFS.writeFromInputStream(fileToSave, new FileInputStream(new File(filename)))

      Ok(Json.obj("e" -> 0))
    }.getOrElse {
      Redirect(routes.Application.index).flashing(
        "error" -> "Missing file"
      )
    }
  }
}
于 2013-08-05T20:41:14.047 に答える