我有一个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页面中字节数组的图像?
答案 0 :(得分:1)
我在这里有一个类似的用例,一个包含byte []的File域类和上传文件的元信息。要下载该文件,我正在使用:
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二级缓存关心它。如果您仍有充分的理由不在下载请求中加载文件,则可以将其存储在上一次调用中的http会话中。 将此存储在http会话中的缺点: