После деплоя проета на Heroku не отображаются картинки, название которых хранятся в бд. На локали все работает, а в Хероку нет.
@Controller
public class TourController {
@Autowired
private TourRepository tourRepository;
@GetMapping("/")
public String mainPageShowTours(Model model) {
model.addAttribute("tours",tourRepository.findAll());
return "home/main";
}
@PostMapping("/admin/save")
public String saveTour(@ModelAttribute(name = "tour") Tour tour,
@RequestParam("fileImage") MultipartFile multipartFile) throws IOException {
String fileName = StringUtils.cleanPath(multipartFile.getOriginalFilename());
tour.setImage(fileName);
Tour savedTour = tourRepository.save(tour);
String uploadDir = "./tour-image/" + savedTour.getId();
Path uploadPath = Paths.get(uploadDir);
if (!Files.exists(uploadPath)) {
Files.createDirectories(uploadPath);
}
try (InputStream inputStream = multipartFile.getInputStream()) {
Path filePath = uploadPath.resolve(fileName);
System.out.println(filePath.toFile().getAbsolutePath());
Files.copy(inputStream, filePath, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
throw new IOException("Невозможно сохранить файл: " + fileName);
}
return "redirect:/admin/tourList";
}
}
Модель:
@Entity
@Table(name = "tour")
public class Tour {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "code")
private int id;
@Column(name = "image", nullable = true)
private String image;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
@Transient
public String getImagePath() {
if (image == null || id == 0) {
return null;
}
return "/tour-image/" + id + "/" + image;
}
<img class="card-img-top" th:src="@{${tour.imagePath}}" alt="Card image cap" width="320" height="200">
После деплоя контролле без проблем загружает в бд название картинок, но не отображает результат в списке объектов.
Что надо исправить, чтобы показывались картинки?