我试图在我的域类上添加img字段,我运行我的应用程序,每次都可以。当我尝试添加img时出现此错误,
属性carImg是类型不匹配的
这是我的域名
package carrentco
class Car {
String brand
String model
String fuelType
BigDecimal pricePerDay
byte[] carImg
static constraints = {
brand(inList:["AUDI", "BMW", "MERCEDES", "NISSAN", "HONDA", "FORD"])
model()
fuelType(inList:["FUEL", "DIESEL", "AUTOGAS"])
pricePerDay(min:0.0, max:1000.0)
carImg(nullable:true, maxSize:1000000)
}
}
这是我添加到控制器的内容。
def displayCarImg = {
def car = Car.get(params.id)
response.contentType = "image/jpeg"
response.contentLength = car?.carImg.length
response.outputStream.write(car?.carImg)
}
这是我的show.gsp
<img src="${createLink(action:'displayCarImg', id:carInstance?.id)}" />
答案 0 :(得分:0)
def viewPic(Long picId) {
def photo = ChatUserPics.get( picId ?: params.id)
if (photo) {
byte[] image = photo.photo
response.outputStream << image
}
}
似乎在这种情况下有效,也许你还没有关注所有这些的官方文件。
我强烈建议将文件系统与db之间的存储图像作为解决方案进行比较,然后再向前推进。个人使用DB作为指针 - 文件系统位置。
如果你有100,000个用户,每个人有10张图片,可能很有经验,直接从手机摄像头上传2mb文件。现在想象一下该DB的备份时间。如果数据需要复制,VS迁移成本会及时发生。数据库问题并且不得不依赖gig db backup来恢复..
无论如何,你正握着方向盘,开着一名乘客,认为这可能是一条坎坷的道路
答案 1 :(得分:0)
如果图像足够小,如头像或拇指,您可以将其存储为Base64编码的字符串:
secondNum
保存在控制器中后,您可以:
class Car {
String brand
String carImg
}
并将其显示在GSP中:
car.carImg = new String( imageAsByteArray ).encodeAsBase64()
此类方法的一大优势是您无需在新请求中获取每个图像。相反,您有一个包含所有嵌入图像的数据页面。这对移动应用非常有利。