アプリケーションのどこからでもアクセスできるように、ユーザーの Photo 変数をセッションに保存する方法を知る必要があります。
3 に答える
元のコントローラーでのセットアップ:
session.photo = photoVariable
別のcontrolelrに入る:
session.photo
GSPからアクセスを取得します。
${session.photo}
http://grails.org/doc/2.1.0/guide/theWebLayer.html#controllersAndScopesを参照してください
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)
}
}
これがあなたが使用できる解決策であることを願っています
セットタグの助けを借りて、セッションを通じてアプリのどこでもプロフィール写真を機能させることができました。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()))
}
}