Как Spring Boot JPA (Hibernate) сохраняет изображения - PullRequest
0 голосов
/ 16 мая 2018

Я просто хочу спросить, когда JPA веб-приложения Spring Boot сохраняет данные, BLOB (используя @LOB) или данные байтового массива в базе данных, какова реальная форма сохранения изображений в базе данных. это собирается сохранить данные всего байта в базе данных или он собирается сохранить только ссылку или адрес для этого объекта байтового массива и в действительности сохранить его в файловом пространстве системы.

Я хочу спросить специально для репозитория Spring Boot JPA. Пожалуйста, объясните это. и если какой-либо демонстрационный пример, чтобы проверить это, пожалуйста, предоставьте его

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Перейдите в это хранилище и перейдите в ветку display-image-from-db.Основной подход заключается в следующем:

  • В вашей сущности:

    @Lob
    private Byte[] image;
    
  • ImageController.java - вы получаете изображение черезMultipartFile

    @PostMapping("recipe/{id}/image")
    public String handleImagePost(@PathVariable String id, @RequestParam("imagefile") MultipartFile file){
    
        imageService.saveImageFile(Long.valueOf(id), file);
    
        return "redirect:/recipe/" + id + "/show";
    }
    
  • Вызовите imageService, чтобы сохранить изображение, передав file в качестве аргумента.

  • Службав основном копирует содержимое изображения в байтовый массив, и, наконец, вы назначаете этот байтовый массив вашей сущности.

    @Override
    @Transactional
    public void saveImageFile(Long recipeId, MultipartFile file) {
    
    try {
        Recipe recipe = recipeRepository.findById(recipeId).get();
    
        Byte[] byteObjects = new Byte[file.getBytes().length];
    
        int i = 0;
    
        for (byte b : file.getBytes()){
            byteObjects[i++] = b;
        }
    
        recipe.setImage(byteObjects);
    
        recipeRepository.save(recipe);
    } catch (IOException e) {
        //todo handle better
        log.error("Error occurred", e);
    
        e.printStackTrace();
    }
    }
    

Для получения полного исходного кода перейдите в репозиторий, который, безусловно, поможет.Однако я настоятельно рекомендую хранить файлы на диске, а не в БД.БД должна хранить только путь к файлам.Для такого решения вот пример: ссылка

0 голосов
/ 18 мая 2018

Для прямого ответа на вопрос контент хранится в базе данных. Это может или не может работать для вас. Как упоминает @dgarceran, есть куча плюсов и минусов. В любом случае я бы порекомендовал вам взглянуть на Spring Content .

Этот проект предоставляет абстракцию для контента / больших двоичных объектов. Это неструктурированные данные, что Spring Data для структурированных данных. Он имеет модули, которые поддерживают JPA (BLOB), файловую систему, GridFS Mongo и S3. Независимо от того, какой модуль вы выберете, он избавит вас от необходимости писать какой-либо шаблонный код, подобный тому, который предоставлен @ Ph03n1x.

С Spring Content все, что вам нужно сделать, - это создать интерфейс ContentStore, а Spring Content предоставит вам реализацию и контроллер. Реализация эффективна, поскольку она будет передавать содержимое между клиентом и базой данных (а не загружать весь файл в память, как это делает пример Ph03n1x). Абстракция также упрощает последующее изменение модели хранилища, если это необходимо.

Здесь есть руководства по началу работы здесь и видеоурок здесь .

НТН

0 голосов
/ 16 мая 2018

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

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