использование Grails и Google App Engine для динамического хранения изображения в виде BLOB-объекта и представления - PullRequest
0 голосов
/ 24 мая 2010

Я пытаюсь динамически отобразить изображение, которое я храню в хранилище данных Google, в виде 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)
}

Мой метод сохранения в контроллере имеет это

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])

}

Мое мнение имеет следующий вид

<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()
}

1 Ответ

0 голосов
/ 24 мая 2010

вы получаете верный байт [] из вашей привязки? IIRC, у grails есть некоторые проблемы с байтовыми массивами и файлами в движке приложения, потому что он использует многочастный распознаватель на основе файлов, который не кошерен в черном списке JRE.

Также попробуйте вернуть тип содержимого в ответ:

response.contentType = "image / png";

...