Не удается добавить изображение в postgresql

#java #spring #image

#java #весна #изображение

Вопрос:

Я создаю магазин на Spring Boot, и мне нужны изображения для моих продуктов. У меня есть таблица

 create table if not exists products
(
    id     bigint unique primary key not null,
    name   varchar(50)               not null unique,
    price  varchar(50)               not null,
    serial varchar(50)               not null unique,
    picture bytea
);
  

У меня есть простой класс объектов для продуктов, а также репозиторий и сервис с базовыми методами CRUD. все мои продукты вставляются в таблицу при запуске программы из основного класса

 @Bean
CommandLineRunner runner(ProductService productService, UserService userService) {
    return args -> {
        productService.saveProduct(new Products(11L, "black mask", 100, 11111, "img/mask_black.png")); //and so on
  

мои изображения сохраняются в resources/static/img/, но это не работает. Я прочитал много ответов в связанных темах, но это бесполезно. Что мне делать?

Ответ №1:

Вы передаете путь к файлу (который имеет строковый тип) для массива байтов, это причина сбоя. Сначала загрузите объект file, используя путь к файлу, затем преобразуйте файл в байтовый массив byte[], а затем передайте этот байт [] для сохранения.

Пример:

 byte[] array = Files.readAllBytes(Paths.get("/path/to/file"));
  

Ответ №2:

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

 create table if not exists products
(
    id        bigint unique primary key not null,
    name      varchar(50)               not null unique,
    price     varchar(50)               not null,
    serial    varchar(50)               not null unique,
    pictureId bigint                    not null
);

create table if not exists productPictures
(
    id      bigint unique primary key not null,
    picture bytea                     not null
);
  

И поместите некоторое ограничение между ними.

Кстати, посмотрите документацию postgres для https://www.postgresql.org/docs/9.1/datatype-binary.html