прочитать загруженный файл в игровой среде

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

затем я запускаю play 'start -Dhttp.port=80' для запуска сервера.

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

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

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

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

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

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


person navins    schedule 27.03.2013    source источник


Ответы (3)


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

person biesior    schedule 27.03.2013
comment
но я не могу напрямую получить доступ к файлу, например localhost/upload/xxx.doc - person navins; 27.03.2013

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

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

person Peter    schedule 29.03.2013

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

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

затем измените route conf, вы можете получить доступ к файлам по методу.

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

    renderBinary(file, ContentType);
person navins    schedule 29.03.2013