3

写真のギャラリーを表示する必要があります。だからここに私のテンプレートがあります:

@(photos: List[Photo])

@title = {
  <bold>Gallery</bold>
}

@main(title,"photo"){
    <ul class="thumbnails">
    @for(photo <- photos) {
        <li class="span3">
            <a href="#" class="thumbnail">
                <img src="@photo.path" alt="">
            </a>
        </li>
    }
    </ul>
}

そして、ここに私のコントローラメソッドがあります:

public static Result getPhotos() {
    return ok(views.html.photo.gallery.render(Photo.get()));
}

そして、ここに私の Photo Bean があります:

    @Entity
    public class Photo extends Model {

@Id
public Long id;

@Required
public String label;

public String path;

public Photo(String path, String label) {
    this.path = path;
    this.label = label;
}

private static Finder<Long, Photo> find = new Finder<Long, Photo>(
        Long.class, Photo.class);

public static List<Photo> get() {
    return find.all();
}

public static Photo get(Long id) {
    return find.byId(id);
}

public static void create(Photo photo) {
    photo.save();
}

public static void delete(Long id) {
    find.ref(id).delete();
}

    }

imgノードのsrc属性に写真の絶対パスを入れたのですがうまくいきません。これを達成する最良の方法は何ですか?

PS: 画像はプレイ アプリケーションの外にあります。

4

1 に答える 1

5

私の非常によく似た質問を見てください: Play ディレクトリ構造の外部からファイルを直接提供します。最後に、次のように表示できる非常に基本的なサンプルで 2 番目の提案を使用しました。

public static Result serve(String filepath){
    // some stuff if required
    return ok(new File("/home/user/files/"+filepath));
}

route (アスタリスクを使用し*filepathて、内部にスラッシュを含む文字列を許可します):

GET   /files/*filepath    controllers.Application.serve(filepath : String)

@ビュー(前の文字の欠如はphoto.path偶然ではありません)

<img src="@routes.Application.serve(photo.path)" alt="@photo.alt" />

編集:

HTTP serverもちろん、ディレクトリを指す新しいサブドメイン/エイリアスを作成できる場合は、コントローラーを介してファイルを提供する必要はありません。そのような場合、リンクをそのまま、http://pics.domain.tld/holidays_2012/1.jpgまたはそれ以上に保存することができますholidays_2012/1.jpg(そして、テンプレートにサブドメインのプレフィックスを付けます)。

最後に、エイリアスを設定できます。Apacheを使用してdomain.tld/*、Playアプリへdomain.tld/pics/*のポインターとして、およびいくつかのフォルダーへのポインターとして使用します

<VirtualHost *:80>
  ProxyPreserveHost On
  ServerName domain.tld
  ProxyPass  /pics !
  ProxyPass / http://127.0.0.1:9000/
  ProxyPassReverse / http://127.0.0.1:9000/

  Alias /pics/ /home/someuser/somefolder_with_pics/
  <Directory /home/someuser/somefolder_with_pics/>
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

そのような場合は、ProxyPass /pics ! 前に配置することが重要です ProxyPass / http://...

于 2012-06-04T15:58:36.730 に答える