Image 使用grails和googleappengine动态地将图像存储为blob和视图

Image 使用grails和googleappengine动态地将图像存储为blob和视图,image,google-app-engine,grails,groovy,blob,Image,Google App Engine,Grails,Groovy,Blob,我试图动态显示一个图像,我正在谷歌数据存储中存储为一个Blob。我没有得到任何错误,但我得到了一个破碎的页面上,我看到的图像 任何帮助都会很棒 我的grails应用程序中有以下代码 域类具有以下特性 @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) Long id @Persistent String siteName @Persistent String url @Persistent Blob i

我试图动态显示一个图像,我正在谷歌数据存储中存储为一个Blob。我没有得到任何错误,但我得到了一个破碎的页面上,我看到的图像

任何帮助都会很棒

我的grails应用程序中有以下代码

域类具有以下特性

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
Long id

@Persistent
String siteName

@Persistent
String url

@Persistent
Blob img

@Persistent
String yourName

@Persistent
String yourURL

@Persistent
Date date

static constraints = {
    id( visible:false)
}
<img src="${createLink(controller:'siteInfoController', action:'showImage', id:fieldValue(bean:siteInfoInstance, field:'id'))}"></img>
我在控制器中的保存方法具有以下内容

def save = {
    params.img = new Blob(params.imgfile.getBytes())
    def siteInfoInstance = new SiteInfo(params)
    if(!siteInfoInstance.hasErrors() ) {
        try{

            persistenceManager.makePersistent(siteInfoInstance)
        } finally{
            flash.message = "SiteInfo ${siteInfoInstance.id} created"
            redirect(action:show,id:siteInfoInstance.id)    
        }
    }

    render(view:'create',model:[siteInfoInstance:siteInfoInstance])

}
我的观点如下

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
Long id

@Persistent
String siteName

@Persistent
String url

@Persistent
Blob img

@Persistent
String yourName

@Persistent
String yourURL

@Persistent
Date date

static constraints = {
    id( visible:false)
}
<img src="${createLink(controller:'siteInfoController', action:'showImage', id:fieldValue(bean:siteInfoInstance, field:'id'))}"></img>

在我的控制器中,它调用的显示图像链接的方法如下所示

def showImage = {

    def site =  SiteInfo.get(params.id)// get the record
    response.outputStream << site.img // write the image to the outputstream
    response.outputStream.flush()
}
def showImage={
def site=SiteInfo.get(params.id)//获取记录

response.outputStream您是否从绑定中返回了正确的字节[]?IIRC,grails在应用程序引擎上的字节数组和文件方面存在一些问题,因为它使用的是基于文件的多部分解析器,与JRE黑名单不符

还可以尝试在响应中返回内容类型:

response.contentType=“image/png”