У меня проблема при сохранении и получении изображения из базы данных MySQL.Я могу сохранить изображение в базе данных MySQL следующим образом.
Страница JSP (Multipart Object) -> byte [] в классе обслуживания -> SerialBlob в классе DAO.
Со страницы JSP с использованием EL и SpEL я передал файл изображения в виде объекта Multipart, а затем в контроллер преобразовал multipart в байт [] и сохранил его внутри DTO, а затем передал этот байт []преобразовав его в SerialBLOB в классе Service и сохранив в базе данных, используя DAO.Он работает эффективно.
Чтобы извлечь изображение из базы данных, сначала я сохранил полученное изображение в виде объекта BLOB, а затем преобразовал его в байт [], но для просмотра изображенияв JSP мне пришлось конвертировать byte []] в формат String.Он работает, когда я создал два разных проекта для хранения и извлечения изображений.
Но проблема возникла, когда я попытался сохранить и извлечь изображение из базы данных, для этого у меня былоизменить тип возвращаемого свойства изображения моего DTO на String, потому что мне пришлось передать String на мою страницу JSP для просмотра изображения.Здесь, получение работало нормально, но когда я пытался сохранить файл изображения при преобразовании multipart в строку и строку в (string -> byte [] -> SerialBLOB) SerialBLOB он сохранялся в базе данных, но изображение было повреждено, это говорит недопустимое изображение при открытии.
Фрагмент контроллера:
@RequestMapping(value = "/insert", method = RequestMethod.POST)
public String productsPageInsert(Map<String, Object> map, @Valid
@ModelAttribute("productCmd") ProductsCommand productsCommand,
BindingResult errors) throws IOException {
List<ProductLinksDTO> listLinksDTO = null;
ProductLinksDTO linkDTO1 = null, linkDTO2 = null;
ProductsDTO productsDTO = null;
List<ProductsDTO> listDTO = null;
String result = null;
try {
if (errors.hasErrors()) {
return "adminProductsDef";
}
listLinksDTO = new ArrayList<>();
listDTO = new ArrayList<>();
linkDTO1 = new ProductLinksDTO();
linkDTO2 = new ProductLinksDTO();
productsDTO = new ProductsDTO();
// Adding links to list
linkDTO1.setLink(productsCommand.getLinkFirst());
linkDTO2.setLink(productsCommand.getLinkSecond());
listLinksDTO.add(linkDTO1);
listLinksDTO.add(linkDTO2);
// Adding data into dto
productsDTO.setProductName(productsCommand.getProductName());
productsDTO.setDescription(productsCommand.getDescription());
productsDTO.setLinks(listLinksDTO);
// adding image into products dto.
productsDTO.setImage(new String(productsCommand.getImage().getBytes()));
listDTO.add(productsDTO);
result = productsService.addProduct(productsDTO);
map.put("resultMsg", result);
map.put("products", listDTO);
return "redirect: /home_page/products_page.htm";
} catch (DataAccessException dae) {
map.put("errorMsg", dae.getMessage() + "\n" + dae.getStackTrace());
return "failure";
} catch (SerialException e) {
map.put("errorMsg", e.getMessage() + "\n" + e.getStackTrace());
return "failure";
} catch (SQLException e) {
map.put("errorMsg", e.getMessage() + "\n" + e.getStackTrace());
return "failure";
} catch (Exception e) {
map.put("errorMsg", e.getMessage() + "\n" + e.getStackTrace());
return "failure";
}
}
- Когда я конвертировал объектный файл Multipart в String, он должен быть поврежден.
Фрагмент класса обслуживания
@Override
@Transactional
public String addProduct(ProductsDTO productsDTO) throws SerialException, SQLException {
int count = 0;
ProductsHLO productsHLO = null;
List<ProductLinksHLO> listLinkHLO = new ArrayList<>();
productsHLO = new ProductsHLO();
// copy dto data into hlo
productsDTO.getLinks().forEach(linkDTO -> {
ProductLinksHLO linkHLO = new ProductLinksHLO();
BeanUtils.copyProperties(linkDTO, linkHLO);
listLinkHLO.add(linkHLO);
});
productsHLO.setDescription(productsDTO.getDescription());
// converting (image) String into SerialBlob
productsHLO.setImage(new SerialBlob(productsDTO.getImage().getBytes()));
productsHLO.setProductName(productsDTO.getProductName());
productsHLO.setLinks(listLinkHLO);
// executing dao method
count = productsDAO.insertProduct(productsHLO);
if (count != 0)
return "Product added successfully";
else
return "Product Not added!";
}
Пожалуйста, помогите мне и дайте мне любое предложение, чтобы этого не произошло.Если у вас есть другие идеи для этой операции, пожалуйста, скажите мне.
Спасибо.