Как отобразить изображение в Grails GSP? - PullRequest
9 голосов
/ 03 ноября 2008

Я все еще изучаю Grails и, похоже, наткнулся на камень преткновения.

Вот 2 класса домена:

class Photo {
    byte[] file 

    static belongsTo = Profile
}


class Profile {
    String fullName
    Set photos

    static hasMany = [photos:Photo]     
}

Соответствующий фрагмент контроллера:

class PhotoController {

    def viewImage = {

      def photo = Photo.get( params.id )
      byte[] image = photo.file 
      response.outputStream << image

    } 
} 

Наконец, фрагмент GSP:

<img class="Photo" src="${createLink(controller:'photo', action:'viewImage', id:'profileInstance.photos.get(1).id')}" />

Теперь, как мне получить доступ к фотографии, чтобы она отображалась в GSP? Я уверен, что profileInstance.photos.get(1).id неверно.

Ответы [ 6 ]

4 голосов
/ 09 ноября 2008

Если у вас есть URL для изображения, вам просто нужно убедиться, что вы вернули соответствующий контроллер в контроллер:

  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;
  }
3 голосов
/ 03 ноября 2008

Поскольку это набор, если вы хотите первый элемент, вам нужно идти:

profileInstance.photos.toArray()[0].id

или

profileInstance.photos.iterator().next()
2 голосов
/ 06 ноября 2008

Теперь я считаю, что хранение фотографии в виде двоичного двоичного объекта в базе данных - не лучшее решение, хотя у вас могут быть причины, почему это нужно сделать именно таким образом.

как насчет сохранения названия фотографии (и / или пути) вместо этого? Если возможны проблемы с именами, используйте в качестве имени контрольную сумму md5 фотографии. Затем фотография становится статическим ресурсом, простым файлом, а не более сложным и медленным запросом MVC.

1 голос
/ 28 марта 2012

Я изучаю Граальс, тоже искал такой пример. Фрагмент GSP не работает для меня. Я решил, заменив одинарные кавычки вокруг profileInstance.photos.get (1) .id

<img class="Photo" src="${createLink(controller:'photo', action:'viewImage', id:'profileInstance.photos.get(1).id')}" />

с двойными кавычками:

<img class="Photo" src="${createLink(controller:'photo', action:'viewImage', id:"profileInstance.photos.get(1).id")}" />

Теперь Grails разрешает выражение вокруг двойных кавычек. В противном случае он принимает это как строку.

0 голосов
/ 14 марта 2010

id: 'profileInstance.photos.get (1) .id' должен быть id: profileInstance.photos.get (1) .id. без квоты

0 голосов
/ 04 ноября 2008

Полагаю, вам нужно установить тип содержимого потока ответа. Что-то вроде:

response.ContentType = "image/jpeg"

Это может произойти, а может и не понадобиться, прежде чем вы перейдете к потоку ответов (не могу представить, что это будет иметь значение). Я бы просто поместил его перед строкой outputStream в вашем коде выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...