2014-10-16 2 views
10

항목 클래스 항목 (itemId, itemName, itemPrice, itemContent, itemImage)에 대해 봄 mvc를 사용하여 BLOB 유형 이미지를 저장하려고합니다. 데이터베이스에 이미지를 성공적으로 저장했지만 내 jsp에서 표시하려고합니다. [B @ 7fb0c025와 같은 이진 파일을 보여줍니다.spring mvc를 사용하여 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"항목을 추가 할 수있는 이미지와 함께 속성 :

어떻게 (이미지가 MySQL 데이터베이스 테이블에 저장됩니다)

내 모델 클래스는 JSP에서 적절한 이미지를 표시 할 수 있습니다 데이터 베이스.

<form:form modelAttribute="itemAttribute" enctype="multipart/form-data" method="POST" action="${Url}"> 
<table> 

    <tr> 
     <td><form:label path="itemId"></form:label></td> 
     <td><form:input path="itemId" type="hidden"/></td> 
    </tr> 

    <tr> 
     <td><form:label path="itemName">ItemName:</form:label></td> 
     <td><form:input path="itemName"/></td> 
    </tr> 
    <tr> 
     <td><form:label path="itemPrice">ItemPrice:</form:label></td> 
     <td><form:input path="itemPrice"/></td> 
    </tr> 
    <tr> 
     <td><form:label path="itemContent">ItemContent:</form:label> 
     <td><form:input path="itemContent"/> 
    </tr> 
    <tr> 
     <form:label for="itemImage" path="itemImage">itemImage:</form:label> 
     <form:input path="itemImage" type="file" /> 
    </tr> 
</table> 

<input type="submit" value="Save" /> 
</form:form> 

jsp 페이지는 이미지와 함께 항목 속성을 표시합니다. 카테고리 ID : 내가 제대로 내가이 JSP에서 이미지 이케를 표시하여 잘못하고 있어요 추측 database.I에 저장되어있는 이미지를 표시 할 수있는 방법

<tr> 
     <td><form:label path="categoryName">CategoryName:</form:label></td> 
     <td><form:input path="categoryName"/></td> 
    </tr> 
</table> 
<input type="submit" value="Save" /> 

<table width: 100%; text-align:center"> 
<tr> 
    <th>ItemId</th> 
    <th>ItemName</th> 
    <th>ItemPrice</th> 
    <th>ItemFeatures</th> 
    <th>Edit</th> 
    <th>Delete</th> 
    <th>ItemImage</th> 
</tr> 
<tbody> 


    <c:forEach items="${categoryAttribute.item}" var="item"> 
    <tr> 
      <c:url var="editCUrl" value="/item/edit?bid=${categoryAttribute.categoryId}&cid=${item.itemId}" /> 
      <c:url var="deleteCUrl" value="/item/delete?id=${item.itemId}" /> 
      <td><c:out value="${item.itemId}" /></td> 
      <td><c:out value="${item.itemName}"/></td> 
      <td><c:out value="${item.itemPrice}"/></td> 
      <td><c:out value="${item.itemContent}"/></td> 
      <td><a href="${editCUrl}">EditItem</a></td> 
      <td><a href="${deleteCUrl}">DeleteItem</a></td> 
      <td><c:out value="${item.itemImage}"/></td> 
    </tr> 
    </c:forEach> 

. 하지만 jsp에서 이미지를 어떻게 표시 할 수 있습니까?

+0

에 손님 태그 파일을 포함한다. 하지만 jsp에서 이미지를 올바르게 표시하려면 어떻게해야합니까? – bablu

답변

19

마침내 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의

내가이

<img src="/Project1/myImage/imageDisplay?id=${item.itemId}"/> 

을했고 이미지가 성공적으로 표시되었습니다.

+0

좋은 답변을 주셔서 감사합니다. 저는 봄 mvc에 익숙하며 새로운 컨트롤러를 만들지 않고이 방법을 사용할 수있는 방법이 있습니까? 고맙습니다. –

4

아래 코드를 제 컨트롤러에 썼는데 저에게 잘 맞습니다.

내 프로젝트 사용자는 사진 @LOB이있는 프로필 개체가 있습니다. 귀하의 속성에 따라이 코드를 수정하십시오. JSP 파일에

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

난 당신이 공통 코덱 항아리 필요 이것에 대한 코드

<img src="data:image/jpeg;base64,${userImage}" /> 

을 썼다.

또한 이미지를 표시하기 위해 맞춤 태그를 사용할 수 있습니다.

0

데이터베이스에서 jsp로 이미지를 표시하기 위해 할 수있는 한 가지 더. jsp에서 모든 사용자의 이미지를 표시해야한다고 가정합니다. 이 경우 바이트 이미지를 base64 이미지로 변환하기위한 코드가 포함 된 자신 만의 justl 태그를 만들 수 있습니다. 내 프로젝트에서 여기

이미지가

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());  } 
    } 
} 

가있는 WebContent에 TLD 파일을 생성 프로필 클래스에서

즉 user.getProfile(). getPhoto()

이다.내 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로 코드를 작성할 수 있습니다.

<img src="<ui:image usrImage='${user.profile.photo}' /> 

필요가 컨트롤러에 이미지를 변환하지 할 때마다 단지 JSP에 바이트 이미지를 전달하고 우리의 손님 태그는 바이트 이미지를 변환보기 페이지를 dispay 것입니다.

은 참고 : 화상을 표시하는 <= "$ {item.itemImage가}"/ 아웃 값 C> 난 사용하고 JSP 파일

<%@ taglib uri="/taglib/userimage.tld" prefix="ui"%> 
관련 문제