Вставьте файл изображения в 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))
}
}