【发布时间】:2013-10-31 09:38:36
【问题描述】:
我正在尝试将用户上传的图像存储在我的应用程序中,该应用程序由 scala 编写并播放框架 2.2.x 我已经在heroku中部署了我的应用程序。 Heroku 不允许我将文件保存在文件系统中。 所以我尝试将我的文件存储在数据库中。
这是我用于存储图像的代码:
def updateImage(id: Long, image: Array[Byte]) = {
val selected = getById(id)
DB.withConnection {
implicit c =>
SQL("update subcategory set image={image} where id = {id}").on('id -> id, 'image -> image).executeUpdate()
}
selected }
这是我用来检索图像的代码:
def getImageById(id: Long): Array[Byte] = DB.withConnection {
implicit c =>
val all = SQL("select image from subcategory where id = {id}").on('id -> id)().map {
case Row(image: Array[Byte]) => image
case Row(Some(image: Array[Byte])) => image
case Row(image: java.sql.Blob )=> image.getBytes(0 , image.length().toInt)
}
all.head
}
问题是:当我使用 H2 数据库和 blob 列时,出现“匹配错误”异常。 当我使用 Postgresql 和 bytea 列时,我没有收到任何错误,但是当我检索图像时,它是十六进制格式,并且数组开头的一些字节丢失了。
【问题讨论】:
-
在数据库中存储 blob 图像确实是一个非常糟糕的主意。当我看到这样的事情时,我感到很脏。尝试将您的图像保存在 Amazon S3 之类的云存储中,或者 imageshack 更好,除非您不会在网页中显示此图像。还要尝试在客户端执行与图像处理相关的所有操作,例如调整大小、裁剪,因为 Heroku 没有好的工作解决方案。
-
Thanx Ben,但我是新玩框架(和 scala)的新手,找不到关于如何在游戏中使用 Amazon S3 的好教程。
标签: scala playframework anorm