When I Inserted image I encoded using Base64:
//encode image
byte[] byteArray = Base64.encodeBase64(productImage.getBytes());
And to get product details in my spring controller I am fetching data like:
@GetMapping(value = "/searchNewAddedProducts")
public ModelAndView getAllNewAddedProducts(HttpServletRequest request) {
String msg=null;
List<ProductWithBLOBs> newList=new ArrayList<>();
List<ProductWithBLOBs> newProductList = productService.fetchNewAddedProduct();
if(!newProductList.isEmpty()) {
for(ProductWithBLOBs prod:newProductList) {
prod.setProductImage(Base64.decodeBase64(prod.getProductImage()));
newList.add(prod);
System.out.println("image:"+prod.getProductImage());
}
request.setAttribute("newProductList", newList);
}
msg="some message";
ModelAndView mav = new ModelAndView("admin/viewProduct");
mav.addObject("result", msg);
return mav;
}
And in my jsp i am using Jstl to iterate list data and display in a table:
<c:forEach items="${newProductList}" var="product">
<tr>
<td><c:out value="${product.sku}"/></td>
<td><c:out value="${product.productName}"/></td>
<td><c:out value="${product.price}"/></td>
<td><img src="${product.productImage}"/></td>
<td><c:out value="${product.productDescription}"/></td>
</tr>
</c:forEach>
I tried one another approach in jsp to call controller like
<td> <img id=productImage" name="productImage" src="getProducctImage/'${product.sku}'/>"></td>
And it's not even calling my controller:
@GetMapping("/getProducctImage/{sku}")
public void getProductImage(HttpServletResponse response,@RequestParam("sku") String sku)
throws IOException{
response.setContentType("image/*");
byte[] img = productService.fetchProductImageBySku(sku);
if(img!=null) {
img=Base64.decodeBase64(img);
InputStream inputStream = new ByteArrayInputStream(img);
IOUtils.copy(inputStream, response.getOutputStream());
}
}
Here productImage is of byte[] type, I need help that which step I am missing or what wrong I am doing