Comment faire pour afficher l'image en grain SPG?
Je suis encore à apprendre Graal et qui semble avoir frappé une pierre d'achoppement.
Voici les 2 classes de domaine:
class Photo {
byte[] file
static belongsTo = Profile
}
class Profile {
String fullName
Set photos
static hasMany = [photos:Photo]
}
Pertinentes contrôleur extrait de:
class PhotoController {
def viewImage = {
def photo = Photo.get( params.id )
byte[] image = photo.file
response.outputStream << image
}
}
Enfin le SPG extrait de:
<img class="Photo" src="${createLink(controller:'photo', action:'viewImage', id:'profileInstance.photos.get(1).id')}" />
Maintenant, comment puis-je accéder à la photo de sorte qu'il sera indiqué sur la SPG? Je suis assez sûr que
profileInstance.photos.get(1).id
n'est pas correct.
Avez-vous essayé? Il devrait provoquer 'viewImage' à être appelé avec l'id=1, la référence à une instance de Photo en supposant qu'il existe un 'profileInstance" dans le cadre. Vous devrez peut-être ajuster le contenu de la réponse demandez-vous comment sélectionner photo est affichée?
J'espère pour afficher la première photo de l'ensemble, merci.
J'espère pour afficher la première photo de l'ensemble, merci.
OriginalL'auteur Walter | 2008-11-03
Vous devez vous connecter pour publier un commentaire.
Que c'est un Ensemble, si vous souhaitez que le premier élément, vous devrez aller:
ou
Ah oui. J'ai modifié ma réponse.
OriginalL'auteur Hates_
Si vous avez une url pour l'image, vous avez juste à assurez-vous de retourner le approprié anser dans le contrôleur:
OriginalL'auteur Miguel Ping
maintenant, je pense en fait que le stockage de la photo comme un blob binaire dans la base de données n'est pas la meilleure solution, bien que vous pourriez avoir des raisons pourquoi il doit être fait de cette manière.
comment stocker le nom de la photo (et/ou le chemin d'accès) à la place? Si le nom de heurter les questions sont probables, l'utilisation de la somme de contrôle md5 de la photo que le nom. Ensuite, la photo devient une ressource statique, un simple fichier, au lieu d'une plus compliqué et plus lent MVC demande.
Ce que sur la sécurisation de l'image? Si vous utilisez un direct URL pour le fichier, vous perdez la capacité (ou de les rendre beaucoup plus difficile pour) obtenir l'image à des utilisateurs/rôles.
je suppose que ça dépend des besoins. La sécurité ont un coût, et ma méthode est un peu plus difficile (pas impossible, mais c'est probablement plus simple d'utiliser d'autres suggestions si la sécurité est importante).
En plus de la sécurité, on peut mentionner que vous devenez alors tendance à "système de fichiers" problèmes " (disons hébergé dans un environnement où quelqu'un peut supprimer vos fichiers). De Plus, si vous stockez un blob dans la base de données, vous pouvez encapsuler que dans une classe qui peut stocker d'autres métadonnées que vous pouvez utiliser pour faire toute sorte de choses intéressantes comme "trouvez-moi toutes les photos d'un chat" qui sont difficiles à faire avec le système de fichiers de stockage. Alors que la performance est importante, il y a toutes sortes de raisons pour lesquelles le stockage d'un fichier dans un environnement relationnel peut faire sens.
Ranger des choses sur le système de fichiers complique également la sauvegarde/restauration, les exportations, etc. et ajoute de la complexité de l'infrastructure et de la configuration. Aussi, si vous utilisez une dynamique CDN comme Akamai la surcharge supplémentaire de chargement des images à partir de la DB ne va pas être un problème pour la mise en cache de requêtes. J'ai construit un CMS à l'aide d'images chargées à partir de la DB et le gain de performance n'est pas vraiment perceptible.
OriginalL'auteur Chii
Im apprentissage graal trop était à la recherche d'un exemple comme celui-ci.
Le SPG snipplet n'a pas fonctionné pour moi. Je l'ai résolu en remplaçant les guillemets simples autour de profileInstance.des photos.(1).id
avec des guillemets doubles:
Maintenant graal résout l'expression autour de la double guillemets. Sinon, il la prend comme une chaîne de caractères.
OriginalL'auteur stitakis
Ma conjecture est que vous devez définir le type de contenu du flux de réponse. Quelque chose comme:
Cela peut ou peut ne pas avoir besoin d'être devant vous flux le flux de réponse (ne peut pas imaginer qu'il serait question). Je venais tout juste de le placer avant le outputStream ligne dans votre code ci-dessus.
OriginalL'auteur billjamesdev
id:'profileInstance.des photos.(1).id " doit être id:profileInstance.des photos.(1).id. pas de quota
OriginalL'auteur leroy zhu