Сохранение файлов изображений в веб-приложении, java

In my web Application, I want to allow "client side users" to upload large amount of image files, and "customer side users" must able to see a grid of uploaded image files.

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

В основном я использую java-технологии, но сомневаюсь,

  • Каков наиболее безопасный и эффективный способ управления такими огромными файлами изображений?
  • Какой стек технологий лучше всего подходит для использования в веб-приложениях такого типа?
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
755
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Перейдите в этот хранилище и перейдите в ветку 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();
    }
    }
    

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

TL; DR

  • Я настоятельно рекомендую хранить данные не в самой базе данных, а в файловой системе. (Например: в папке.)
  • Этот гид также может быть полезен.
  • Здесь вы найдете полную реализацию RESTful.

Ваше здоровье!

Это ответ только по ссылке (на вопрос, основанный в первую очередь на мнении). Было бы лучше, если бы в ваш ответ был включен соответствующий контент из связанных источников, поэтому, если какая-либо из связанных страниц исчезнет, ​​решение сохранится.

MT0 16.05.2018 12:21

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