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

Я попытался вставить изображение в базу данных, но я получаю ошибку, говорящую о type mismatch; found: (Symbol, Array[Byte]); required: anorm.NamedParameter 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******.jpg"))

 var fis = new FileInputStream("Image******.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 ответа

В качестве обходного пути скажите прямо, как преобразовать массив [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))
 }
}


Поддержка blob/двоичных данных недоступна на текущем уровне воспроизведения (до 2.3), но будет в 2.4.

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

licensed under cc by-sa 3.0 with attribution.