9

私はまだ 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それは正しくないと確信して います。

4

6 に答える 6

4

画像の URL がある場合は、コントローラーで適切な anser を返すようにする必要があります。

  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;
  }
于 2008-11-09T12:37:47.573 に答える
3

Set であるため、最初の要素が必要な場合は、次のようにする必要があります。

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

また

profileInstance.photos.iterator().next()
于 2008-11-03T17:29:43.023 に答える
2

今、私は実際に写真をデータベースにバイナリブロブとして保存することは最善の解決策ではないと思います-あなたはそれがそのように行われる必要がある理由があるかもしれませんが。

代わりに写真の名前(および/またはパス)を保存するのはどうですか?名前の衝突の問題が発生する可能性がある場合は、写真のmd5チェックサムを名前として使用します。そうすると、写真は、より複雑で低速なMVCリクエストではなく、静的なリソース、つまり単純なファイルになります。

于 2008-11-06T13:28:35.160 に答える
1

私もグライルを学んでいて、このような例を探していました。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は二重引用符の周りの式を解決します。それ以外の場合は、文字列として受け取ります。

于 2012-03-28T04:38:17.460 に答える
0

id:'profileInstance.photos.get(1).id' は id:profileInstance.photos.get(1).id である必要があります。割り当てなし

于 2010-03-14T03:08:53.883 に答える
0

私の推測では、応答ストリームのコンテンツ タイプを設定する必要があります。何かのようなもの:

response.ContentType = "image/jpeg"

これは、応答ストリームにストリーミングする前に必要な場合とそうでない場合があります (それが問題になるとは想像できません)。上記のコードの outputStream 行の前に置くだけです。

于 2008-11-03T21:27:16.163 に答える