0

我只需要知道如何在会话中存储用户照片变量,以便可以在应用程序的任何位置访问它。

4

3 回答 3

1

原始控制器中的设置:

session.photo = photoVariable

进入另一个控制器:

session.photo

从 GSP 获取访问权限:

${session.photo}

请参阅http://grails.org/doc/2.1.0/guide/theWebLayer.html#controllersAndScopes

于 2013-01-18T05:52:43.837 回答
0

我建议您使用 Igor 的答案并将您的照片存储在会话中。您可以像这样对其进行 Base64 编码:

 data:${user.photoMimeType};base64,${user.photo}

其中 photoMimeType 通常是“image/jpeg”或“image/png”,user.photo 以 Base64.encode(image bytes) 的形式存储在您的数据库中

在您看来,您可以使用

<img src="${session.photo}"/> 

照片将在您的 html 中内联的位置。这个解决方案的缺点是,每个 html 都有内联的图像,这不利于缓存。

替代解决方案是:

在您的登录控制器中:

 session.photoUrl = g.createLink(controller: 'user', action: 'img', id: user.id)

在您的 gsp 中:

 <img src="${session.photoUrl}"

在您的用户控制器中:

def img = {
    def user = User.get(params.id)
    if(user) {
        response.setContentType(user.imageMimeType)
        response.outputStream << user.imageData
    } else {
        log.debug "not found"
        response.sendError(HttpServletResponse.SC_NOT_FOUND)
    }
}

希望这是您可以使用的解决方案

于 2013-01-18T11:46:26.370 回答
0

在设置标签的帮助下,我已经设法通过会话在应用程序的任何地方都可以使用个人资料图片。http://grails.org/doc/2.1.0/ref/Tags/set.html 现在我面临的问题是当我更改会话用户时,它的个人资料图片会改变,但它的缩略图照片不起作用,除非你刷新一次页面。

谁能解释一下。感谢你的帮助。谢谢

谁能解释这个个人资料图片功能/动作

def profilePhoto = {
    response.setContentType('image/jpeg')
    response.setHeader('Cache-control', 'no-cache')
    def userId = session.selectedUser.id
    if(params.userId){
      userId = params.userId
    }
    if(params?.id != null && !(params?.id.empty)){
      params.maxWidth?: 190.00
      params.maxHeight?: 190.00
      response.outputStream << imageProxyService.loadThumbnailImage(params.id, securityService.passwordEncoder(userId.toString()))
    }
  }
于 2013-01-20T23:30:42.970 回答