Как отобразить изображение из базы данных mysql с помощью spring mvc

Я сохраняю изображение типа BLOB в базе данных mysql, используя spring mvc для элемента элемента item (itemId, itemName, itemPrice, itemContent, itemImage). Я успешно сохранил изображение в базе данных, но когда я пытаюсь отобразить его в моей jsp.It показывает что-то двоичное, как [B @7fb0c025.

Как я могу отобразить правильное изображение в jsp (изображение хранится в таблице базы данных mysql)

Мой класс модели:

@Entity
@Table(name="item")
public class Item {
@Id
@Column(name="ItemId")
@GeneratedValue
private Integer itemId;
@Column(name="ItemName")
private String itemName;
@Column(name="ItemContent")
private String itemContent;
/*
@Column(name="ItemImage")
private ByteArray ItemImage;
*/
@Column(name="ItemPrice")
private int itemPrice;
@Column(name="ItemImage")
private byte[] itemImage;

"addItem.jsp", чтобы добавить атрибуты элементов вместе с изображением в базе данных.

<form:form modelattribute="itemAttribute" enctype="multipart/form-data" method="POST" action="${Url}">
<form:label for="itemImage" path="itemImage">itemImage:</form:label><form:input path="itemImage" type="file">
 </form:input><table>
 <tbody><tr>
 
 
 </tr>
 <tr>
 <td><form:label path="itemName">ItemName:</form:label></td>
 
 </tr>
 <tr>
 <td><form:label path="itemPrice">ItemPrice:</form:label></td>
 
 </tr>
 <tr>
 <td><form:label path="itemContent">ItemContent:</form:label>
 </td><td><form:input path="itemContent">
 </form:input></td></tr>
 <tr>
 
 </tr>
</tbody></table>

</form:form>

Страница jsp для отображения атрибутов элемента вместе с изображением.                        CategoryId:                  

<form:label path="categoryName">CategoryName:</form:label>
 <form:input path="categoryName">
 

<c:foreach items="${categoryAttribute.item}" var="item">
 </c:foreach><c:url var="editCUrl" value="/item/edit?bid=${categoryAttribute.categoryId}&cid=${item.itemId}">
 <c:url var="deleteCUrl" value="/item/delete?id=${item.itemId}">
 </c:url></c:url><p>Как я могу правильно отобразить изображение, которое хранится в базе данных. Думаю, я делаю это неправильно, отображая изображение ilke в jsp.   
Но как я могу отобразить изображение здесь в jsp.</p><table width:="" 100%;="" text-align:center"="">
<tbody><tr>
 <th>ItemId</th>
 <th>ItemName</th>
 <th>ItemPrice</th>
 <th>ItemFeatures</th> 
 <th>Edit</th>
 <th>Delete</th>
 <th>ItemImage</th>
</tr>
</tbody><tbody>
 <tr>
 
 
 
 
 <td><a href="${editCUrl}">EditItem</a></td>
 <td><a href="${deleteCUrl}">DeleteItem</a></td>
 
 </tr> 
 
</tbody></table></form:input>
3 ответа

Наконец-то я смогу отобразить изображение на моем jsp. что я сделал.

Я отдельно создал контроллер вроде этого.

@Controller
@RequestMapping("/myImage")
public class ImageController {
@Resource(name="categoryService")
private CategoryService categoryService;
@Resource(name="itemService")
private ItemService itemService;
@RequestMapping(value = "/imageDisplay", method = RequestMethod.GET)
 public void showImage(@RequestParam("id") Integer itemId, HttpServletResponse response,HttpServletRequest request) 
 throws ServletException, IOException{
 Item item = itemService.get(itemId); 
 response.setContentType("image/jpeg, image/jpg, image/png, image/gif");
 response.getOutputStream().write(item.getItemImage());
 response.getOutputStream().close();

и в jsp я сделал это

И изображение было успешно отображено.


Я написал ниже код в своем контроллере, и он отлично работает для меня.

в моем проекте Пользователь содержит объект профиля, который имеет фотографию @LOB. измените этот код в соответствии с вашими атрибутами.

byte[] encodeBase64 = Base64.encode(user.getProfile().getPhoto());
 String base64Encoded = new String(encodeBase64, "UTF-8");
 mav.addObject("userImage", base64Encoded );

в jsp файле я написал код

для этого вам нужен баннер с общим кодеком.

также вы можете использовать пользовательский тег для показа изображения.


Еще одна вещь, которую вы можете сделать для отображения изображения в jsp из базы данных. предположим, что вам нужно отображать изображения всех пользователей в jsp. для этого вы можете создать свой собственный тег justl custome, который содержит код для преобразования байтового изображения в образ base64.

здесь в моем проекте изображение находится в классе профиля

i.e user.getProfile(). getPhoto()

package com.spring.tags;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import javax.servlet.jsp.tagext.TagSupport;
import org.apache.commons.codec.base64.Base64;
public class UserImage extends SimpleTagSupport {
 private byte[] usrImage;
 public void setUsrImage(byte[] usrImage) {
 this.usrImage = usrImage;
 }
@Override
 public void doTag() throws JspException, IOException {
 System.out.println("tag lib");
 try {
 JspWriter out = getJspContext().getOut();
 if (usrImage != null && usrImage.length > 0) {
 byte[] encodeBase64 = Base64.encode(usrImage);
 String base64Encoded = new String(encodeBase64, "UTF-8");
 out.print("data:image/jpeg;base64,"+base64Encoded);
 }
 } catch (Exception e) {
 throw new JspException("Error: " + e.getMessage()); }
 } 
}

создать файл tld в WebContent. Я создаю файл в папке taglib

<!--?xml version="1.0" encoding="UTF-8"?-->
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
 <tlib-version>1.0</tlib-version>
 <short-name>ui</short-name>
 <uri>/taglib/userimage</uri>
 <tag>
 <name>image</name>
 <tag-class>com.spring.tags.UserImage</tag-class>
 <body-content>empty</body-content>
 <info>This Tag Displayes current user profile image</info>
 <attribute>
 <name>usrImage</name>
 <required>true</required>
 <description>Provide a display format</description>
 <rtexprvalue>true</rtexprvalue>
 </attribute>
 </tag>
</taglib>

Теперь вы можете написать код в jsp для отображения изображения.

<code><%@ taglib uri="/taglib/userimage.tld" prefix="ui"%>
</code>

licensed under cc by-sa 3.0 with attribution.