Вопрос

Я пытаюсь загрузить изображение в MySQL, используя play framework2.

В игровой среде 1.24 я использую "play.db.jpa.Blob" и "multipart/form-data" чтобы загрузить изображение в MySQL.

А вот в play framework2 нет Blob...Как загрузить изображение с помощью "multipart/form-data" в MySQL?

Это было полезно?

Решение

Вам обязательно следует не хранение ваши файлы в базу данных.Это плохая идея.Вместо этого вам следует загрузить файлы в какую-либо локальную или удаленную файловую систему и сохранить в базе данных только имя файла/путь к нему.

РЕДАКТИРОВАТЬ : Поскольку мой ответ отклонен, я попытаюсь дать немного больше объяснений:

  1. Прежде всего, при работе с типами Blob в платформе Play в вашей базе данных будет создано поле BLOB.Но не все базы данных имеют одинаковую реализацию типа blob.В некоторых RDMS тип Blob будет иметь ограниченное хранилище, а в других (например, MySQL) максимальный размер вашего поля blob будет определяться конфигурацией.

  2. Во-вторых, когда вы извлекаете файлы из базы данных и отправляете их пользователю, использование памяти резко возрастает.Очень просто, потому что Play загружает поле blob в память перед отправкой его пользователю.

  3. Кроме того, если в вашей базе данных хранится много файлов, она будет очень быстро перегружена.(Запросы).Следующим вашим шагом будет перемещение базы данных на новую машину.Но если у вас хранится много данных, следующим узким местом может стать не база данных, а полоса пропускания между вашим приложением и сервером базы данных.

  4. Использование базы данных для хранения файлов всегда будет медленнее и потреблять больше памяти, чем прямое чтение файловой системы, из-за накладных расходов, создаваемых базой данных.

Использование вашей базы данных в качестве механизма хранения файлов — это простое и быстрое в настройке решение, но оно полно неудобств, которые могут действительно изменить ситуацию позже в ходе вашего проекта.

Другие советы

Другой способ, вы можете хранить ссылку на фото в базе данных.

Ввиду:
<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 обрабатывает прозрачный.Он хранит файл в файловой системе и хранит ссылку в БД.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top