Целью является возможность как загрузки, так и рендеринга (например, профиля pic) изображений, которые являются либо государственным, либо частным.не удалось найти файлы с помощью функции play. Функция sendFile
В Play Framework docs (ScalaStream), он говорит:
Play обеспечивает легкий в использовании помощников для общей задачи обслуживания локального файла:
def index = Action { Ok.sendFile(new java.io.File("/tmp/fileToServe.pdf")) }
Если вы хотите, чтобы обслуживать этот файл инлайн :
def index = Action { Ok.sendFile( content = new java.io.File("/tmp/fileToServe.pdf"), inline = true ) }
Это выглядит как ж шляпа необходима для достижения цели.
Теперь у меня есть структура каталогов, как показано ниже, и хотел бы служить файлы 1.png
и 2.png
MyApp
|_ app
|_ conf
|_ public (all public assets)
|_ images
|_ 1.png
|_ private (more assets, not public)
|_ images
|_ 2.png
|_ ...
Я определил функцию контроллера следующим образом:
def sendImage() = Action {
// Ok.sendFile(new java.io.File("/public/images/1.png"))
// Ok.sendFile(new java.io.File("assets/images/1.png"))
Ok.sendFile(new java.io.File("/private/images/1.png"))
}
Пробовал различные разные пути, абсолютные, относительные, но когда я вызываю эту функцию контроллера из front-end (React/Axios), она возвращает только «NoSuchFileException».
Однако, я могу оказывать государственные активы от переднего конца просто с помощью:
<img src='/assets/images/1.png' /> // from the public dir
Тот же путь не работает внутри контроллера. Не удалось выяснить, как Play ожидает его пути.
В настоящее время используется Воспроизведение 2.5
Любые идеи? Спасибо
Когда вы используете '/' перед именем файла, это ожидает полный путь к файлу, а не относительный. Вам нужно перейти от «/private/images/1.png» к «private/images/1.png», чтобы он был относительно вашего приложения. Но, если эти личные файлы загружаются пользователем, их внутри каталога приложений будет считаться плохой практикой. Что произойдет при развертывании новой версии приложения? Вы либо потеряете файлы, либо вам придется копировать/перемещать их во время развертывания. Итак, у вас есть каталог, который является внешним для приложения для хранения загруженных файлов. – marcospereira