2013-03-27 5 views
0

Я использую play framework 2.1.0, загружаю файлы в папку play-app/upload.читать файл загрузки в игровой среде

затем я запустил play 'start -Dhttp.port=80', чтобы запустить сервер.

, но когда я загружаю файл в папку play-app/upload, доступ к нему невозможен.

если я остановлю сервер и начню заново, тогда я могу получить доступ к файлу.

Как я могу решить эту проблему? Большое спасибо.

пс, я маршрут /upload, как показано ниже:

GET  /upload/*file    controllers.Assets.at(path="/upload", file) 

Может быть, что статические файлы загружаются один раз? Как я могу это решить?

ответ

1

Предпочтительно создать папку загрузки вне папки приложения и добавить его полный путь как /home/navins/upload-folder/ в application.conf, то вы будете иметь возможность получить доступ к нему все время, и вы будете иметь возможность загружать файлы не только с приложением (т.е. по FTP) без перезапуска.

+0

, но я не могу напрямую получить доступ к файлу на протяжении как HTTP: //localhost/upload/xxx.doc – navins

1

Я думаю, что вам нужно определить своего рода контроллер Remote assets. В принципе, как только файл загружается, вы помещаете его в папку, находящуюся вне папки вашего приложения. Затем используйте контроллер, который позволит вам получить к нему доступ. Вот пример: http://www.jamesward.com/2012/08/08/edge-caching-with-play2-heroku-cloudfront

Здесь Джеймс Уорд создает контроллер для доступа к ресурсам, хранящимся на облачном сервере, что вам нужно сделать, это написать аналогичный контроллер и заменить «URL-адрес контента» на абсолютный путь к вашему «Каталог загруженных файлов».

+0

ТНХ, Я почти сделал это. – navins

1

наконец, что я решить, добавив метод доступа в контроллере:

public static Result view(String filename) { 
    File file = new File(Play.application().path().getAbsolutePath() + "/upload/" + filename); 
    return ok(file); 
} 

затем, изменение маршрута конф, вы можете получить доступ к файлам с помощью метода.

Кстати, если вы используете рамки игры ниже 2.0, вы можете пользователь:

renderBinary(file, ContentType); 
Смежные вопросы