Вставьте файл изображения в PostgreSQL, используя Anorm

Я попытался вставить изображение в базу данных, но я получаю сообщение об ошибке type mismatch; found : (Symbol, Array[Byte]) ; required: anorm.NamedParameter

Вот мой код, кто-нибудь, пожалуйста, помогите мне.

    def upload = Action(parse.multipartFormData) { request =>
    request.body.file("picture").map { picture =>
    import java.io.File
    val filename = picture.filename
    val contentType = picture.contentType
    println(filename)
    picture.ref.moveTo(new File("Image/rahul.jpg"))

    var fis = new FileInputStream("Image/rahul.jpg")

    var buf: Array[Byte]= new Array[Byte](fis.getChannel().size().toInt);
    fis.read(buf)
    var id = 341;
    DB.withConnection { implicit connection =>
   SQL(
      """
              INSERT INTO kyc(id,image)
              VALUES({id},{image})
      """).on(
        'id -> id,
        'image -> buf
      ).executeUpdate

2 ответа

Поддержка больших двоичных данных недоступна в текущей версии Play (до 2.3), но будет в версии 2.4.

Вы можете собрать Play из источников основной ветки, чтобы получить его сейчас.

В качестве обходного пути, скажите play явно, как преобразовать Array[Byte]. Основываясь на этой публикации, я обнаружил, что мне подходит следующее:

implicit object byteArrayToStatement extends ToStatement[Array[Byte]] {
  def set(s: java.sql.PreparedStatement, i: Int, array: Array[Byte]): Unit = {
    s.setBlob(i, new javax.sql.rowset.serial.SerialBlob(array))
  }
}
implicit def rowToArray: Column[Array[Byte]] = Column.nonNull {
  (value, meta) =>
    value match {
      case byteArray: Array[Byte] => Right(byteArray)
      case _ => Left(TypeDoesNotMatch("Cannot convert " + value + ":" + value.asInstanceOf[AnyRef].getClass))
    }
}
Другие вопросы по тегам