Файловое хранилище PlayFramework 2.0

Мне нужно создать (не загружать!), сохранить и иметь возможность загружать файл PDF с помощью приложения Play 2.0. Как я мог сделать это в Play? Я думаю сохранить файл как большой двоичный объект в базе данных MySQL, но в этом случае есть ли возможность создать файл PDF без использования файловой системы? Второй вопрос, как реализовать загрузку файла?


person Jolene    schedule 12.12.2012    source источник


Ответы (1)


В общем случае хранение файлов в базе данных обычно дороже и имеет некоторые недостатки. (проверьте, почему: Хранение изображений в БД - да или нет?)

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

Есть два решения для рассмотрения:

  1. если вы не беспокоитесь о безопасности, вы можете просто создавать файлы и сохранять их в какой-либо папке, чем вы можете использовать какой-либо http-сервер для его обслуживания, а в своей БД хранить только пути. Это хорошая идея, тем более, что обычно серверы создаются только для обслуживания файлов, поэтому вам не нужно изобретать велосипед.
  2. если файлы ограничены, также храните их в файловой системе, в любом случае в какой-то необщедоступной папке, тогда вы можете вернуть File как Result действия только для аутентифицированных/авторизованных посетителей с таким простым фрагментом кода (Java)

    public static Result serveFile(String absouteFilePath){
        //some authorization...
        return ok(new File(absouteFilePath));
    }
    
person biesior    schedule 12.12.2012
comment
Решено с хранением файлов в файловой системе и их метаданных в БД. Спасибо! - person Jolene; 17.12.2012