play framework 2 загрузить файл в MySQL
-
11-12-2019 - |
Вопрос
Я пытаюсь загрузить изображение в MySQL, используя play framework2.
В игровой среде 1.24 я использую "play.db.jpa.Blob
" и "multipart/form-data"
чтобы загрузить изображение в MySQL.
А вот в play framework2 нет Blob
...Как загрузить изображение с помощью "multipart/form-data"
в MySQL?
Решение
Вам обязательно следует не хранение ваши файлы в базу данных.Это плохая идея.Вместо этого вам следует загрузить файлы в какую-либо локальную или удаленную файловую систему и сохранить в базе данных только имя файла/путь к нему.
РЕДАКТИРОВАТЬ : Поскольку мой ответ отклонен, я попытаюсь дать немного больше объяснений:
Прежде всего, при работе с типами Blob в платформе Play в вашей базе данных будет создано поле BLOB.Но не все базы данных имеют одинаковую реализацию типа blob.В некоторых RDMS тип Blob будет иметь ограниченное хранилище, а в других (например, MySQL) максимальный размер вашего поля blob будет определяться конфигурацией.
Во-вторых, когда вы извлекаете файлы из базы данных и отправляете их пользователю, использование памяти резко возрастает.Очень просто, потому что Play загружает поле blob в память перед отправкой его пользователю.
Кроме того, если в вашей базе данных хранится много файлов, она будет очень быстро перегружена.(Запросы).Следующим вашим шагом будет перемещение базы данных на новую машину.Но если у вас хранится много данных, следующим узким местом может стать не база данных, а полоса пропускания между вашим приложением и сервером базы данных.
Использование базы данных для хранения файлов всегда будет медленнее и потреблять больше памяти, чем прямое чтение файловой системы, из-за накладных расходов, создаваемых базой данных.
Использование вашей базы данных в качестве механизма хранения файлов — это простое и быстрое в настройке решение, но оно полно неудобств, которые могут действительно изменить ситуацию позже в ходе вашего проекта.
Другие советы
Другой способ, вы можете хранить ссылку на фото в базе данных.
Ввиду:
<form action="@routes.Application.index" method="POST" enctype="multipart/form-data">
Photo<input type="file" name="photo"> <br>
<input type="submit" value="Submit">
</form>
.
<form action="@routes.Application.index" method="POST" enctype="multipart/form-data">
Photo<input type="file" name="photo"> <br>
<input type="submit" value="Submit">
</form>
в контроллере:
MultipartFormData body = request().body().asMultipartFormData();
FilePart photo = body.getFile("photo");
if (photo != null) {
String fileName = photo.getFilename();
File file = photo.getFile();
File newFile = new File(play.Play.application().path().toString() + "//public//uploads//"+ "_" + fileName);
file.renameTo(newFile); //here you are moving photo to new directory
System.out.println(newFile.getPath()); //this path you can store in database
}
}
. Это то, что объект BLOB обрабатывает прозрачный.Он хранит файл в файловой системе и хранит ссылку в БД.