Вопрос по playframework, java, playframework-2.0 – Играть! Framework 2.0: Как отобразить несколько изображений?

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()));
}

А вот и мой боб:

    @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();
}

    }

Я поместил абсолютный путь к фотографии в атрибут src узла img, но он не работает. Каков наилучший способ достичь этого?

PS: изображение находится за пределами игрового приложения.

Пожалуйста, покажите вашPhoto исходный код бина. ndeverge
Созданный HTML-это пустая страница с заголовком галереи. Фото не загружены. Значением атрибута src является абсолютный путь к файлу (/home/user/library/photo1.png). mcarrolle
Нет, я не могу получить доступ к фотографии, указав путь в адресной строке браузера. Как я уже сказал, фотографии находятся вне папки приложения воспроизведения. mcarrolle
Что это значит, что он не работает? Предварительный просмотр сгенерированного источника HTML-страницы? Абсолютный путь к некоторому URL или к некоторой папке файловой системы (т.е./home/user/pics/1.jpg)? Можете ли вы открыть нужную фотографию, написав этот путь в браузере?address bar? biesior
Что такое созданный HTML-код? ndeverge

Ваш Ответ

1   ответ
5

Посмотрите на мой очень похожий вопрос:Прямое обслуживание файлов вне структуры каталогов Play Наконец, я использовал свое второе предложение в очень простом примере, оно может быть показано как:

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

маршрут (используйте звездочку с*filepath разрешить строки с косыми чертами внутри):

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

вид (отсутствие@ персонаж передphoto.path не случайно)

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

edit:

Вам, конечно, не нужно подавать файлы через контроллер, если у вас есть какие-либо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 ! before ProxyPass / http://...

Error: User Rate Limit Exceeded mcarrolle

Похожие вопросы