#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