繁体   English   中英

gsp,来自数组字节的图像

[英]gsp, image from array byte

我有一个JDO类和一个辅助类Image,用于将图像存储在字节数组中

JDO类:

@PersistenceCapable
class Recipe{

    @PrimaryKey
        @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
        private Long key

        @Persistent
        private String description

        @Persistent(serialized = "true")
        private Image image;
}

图片类别:

class Image implements Serializable {

    private byte[] content
    private String filename
    private String mimeType
}

在gsp页面中,我遍历所有食谱并希望显示图像。 我可以做一个像这样的控制器来获取图像src。

 def viewImage= {
    //retrieve photo code here
    response.setHeader("Content-disposition", "attachment; filename=${photo.name}")
    response.contentType = photo.fileType //'image/jpeg' will do too
    response.outputStream << photo.file //'myphoto.jpg' will do too
    response.outputStream.flush()
    return;
  }

但是通过这种方式,我必须将配方的密钥发送到此控制器,然后再次从数据存储区加载图像。 (我已经实际上已经加载了它。但是我想我无法将这些数据发送到控制器。可以吗?)没有更方便的方法来显示gsp页面中字节数组中的图像吗?

我在这里有一个类似的用例,一个File域类持有一个byte []和上载文件的元信息。 要下载文件,我正在使用:

def fileDownload = {
    long id = params.id as long
    def file = File.get(id)
    assert file
    def fileName = URLEncoder.encode(file.name)
    response.addHeader("content-disposition", "attachment;filename=$fileName")
    response.contentType = file.contentType
    response.contentLength = file.data.size()
    response.outputStream << file.data
}

关于一遍又一遍地重新加载文件,我不太在乎,Hibernate 2级缓存对此很在乎。 如果仍然有理由不在下载请求中加载文件,则可以在上一个调用中将其存储到http会话中。 将其存储在http会话中的缺点:

  • 在许多并发会话的情况下,高内存消耗
  • 您会看到来自Hibernate的奇怪异常(请务必确保!)
  • http会话中存储的所有内容都必须可序列化

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM