如何使用Spring MVC从MySQL数据库显示图像

发布于 2021-02-02 11:29:24

我正在使用Spring
MVC将MySQL类数据库中的BLOB类型图像存储在Item类Item(itemId,itemName,itemPrice,itemContent,itemImage)中。我已成功将图像存储在数据库中,但是当我尝试在我的jsp中显示图像时,它显示的是二进制文件,例如[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}">
<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页面。CategoryId:

    <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中显示这样的图像来做错了。但是如何在JSP中显示图像?

关注者
0
被浏览
95
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    我终于能够在我的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}"/>
    

    并且图像已成功显示。



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看