Как возвращаться изображения из БД?
Написал серверную часть проекта на Java Spring. Для работы необходимо загружать изображения в базу данных, и по запросу возвращать на клиент. Написал ручку, которая должна подгружать определенную фотку на url, однако почему-то вместо того, чтобы просто отображать картинку в браузере, скачивается файл, который уже можно открыть в браузере. В связи с этим вопрос: как это исправить? Или быть может есть более удачное решение?
Код контроллера:
package com.example.yamabar2.controller;
import com.example.yamabar2.entity.Image;
import com.example.yamabar2.repository.ImageRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.io.ByteArrayInputStream;
@RestController
@RequiredArgsConstructor
public class ImageController {
private final ImageRepository imageRepository;
@GetMapping("/images/{id}")
public ResponseEntity<?> getImageById(@PathVariable Long id) {
Image image = imageRepository.findById(id).orElse(null);
return ResponseEntity.ok()
.header("fileName", image.getOriginalFileName())
.contentType(MediaType.valueOf(image.getContentType()))
.contentLength(image.getSize())
.body(new InputStreamResource(new ByteArrayInputStream(image.getImageBytes())));
}
}
Код Entity
package com.example.yamabar2.entity;
import lombok.Data;
import javax.persistence.*;
@Data
@Entity
public class Image {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
private String originalFileName;
private Long size;
private String contentType;
@Lob
@Column(columnDefinition = "LONGBLOB")
private byte[] imageBytes;
@ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
private Product product;
}