私は画像をPostgresに正しく保存していますが、予期しない結果が画像を読み込もうとしていると思います。エラーがセーブまたはロードされているかどうかはわかりません。ここでAnormを使ってPostgresに画像を保存/読み込む(Scala/PlayFramework 2)
は、画像を保存するための私のAnormコードです:
def storeBadgeImage(badgeHandle: String, imgFile: File) = {
val cmd = """
|update badge
|set img={imgBytes}
|where handle = {badgeHandle}
"""
var fis = new FileInputStream(imgFile)
var imgBytes: Array[Byte] = Resource.fromInputStream(fis).byteArray
// at this point I see the image in my browser if I return the imgBytes in the HTTP response, so I'm good so far.
DB.withConnection { implicit c =>
{
try {
SQL(cmd stripMargin).on("badgeHandle" -> badgeHandle, "imgBytes" -> imgBytes).executeUpdate() match {
case 0 => "update failed for badge " + badgeHandle + ", image " + imgFile.getCanonicalPath
case _ => "Update Successful"
}
} catch {
case e: SQLException => e.toString()
}
}
}
}
...私は「成功し更新」を得るので、私は(私が間違っている可能性)のセーブが働いていると推定します。
def fetchBadgeImage(badgeHandle: String) = {
val cmd = """
|select img from badge
|where handle = {badgeHandle}
"""
DB.withConnection { implicit c =>
SQL(cmd stripMargin).on("badgeHandle" -> badgeHandle)().map {
case Row(image: Array[Byte]) => {
"image = " + image
}
case Row(Some(unknown: Any)) => {
println(unknown + " unknown type is " + unknown.getClass.getName) //[[email protected] unknown type is [B
"unknown"
}
}
}
}
...ではなく、ケースに入る:ここに画像をロードするための私のコードである「行(画像:配列[バイト])は、」期待して、それが「行に入ります(いくつか(不明:任意)) "の場合。私のprintln出力「[未知のタイプが[BであるB 11be1c6 @」
私はBであるか、または私が間違っている可能性がどこどのタイプ[分からない...
、一弘、ありがとうございました。私は "Row(Some(image:Array [Byte]))")にマッチする最初のオプションを取った。そのような明白な間違いを少しばかげて感じました。再度、感謝します。 –