无法在thymleaf中显示byte []图像

时间:2017-07-20 17:30:47

标签: java mysql spring hibernate thymeleaf

我无法在thymleaf中显示字节图像,它来自数据库,因为blob然后转换为byte [],当我从查询成功实现的数据库中获取图像时,但是它无法在thymleaf中显示,下面是代码< / p>

DaoImpl代码   daoimpl中的此功能用于从数据库中恢复图像

在这个功能中使用查询blob从数据库中选择然后blob以字节和字节直接发送到控制器

@Override
public byte[] stockProductMenData() 
{
    Session session = getSession();

    byte[] Imagebytes = null;
    Query query = session.createQuery("select sp.stockProductPic "
            + "from StockType st,StockProduct sp"
            + " where st.stockTypeId=sp.stockTypeId and st.stockTypeName = :stockTypeName");
    query.setParameter("stockTypeName","MEN");



     List<Blob> list = query.list();
     System.out.println("List size :"+list.size()); 

     Iterator<Blob> itr = list.iterator();

      while(itr.hasNext())
      {  
         Blob blob = itr.next();
         try {
            Imagebytes =blob.getBytes(1,(int) blob.length());
            System.out.println("dddddd"+Imagebytes);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            System.out.println("eeeeeee"+e);
        }
      }

控制器  在控制器中,我们接收字节数组并在base64中编码并发送到thymleaf页面

@RequestMapping(value = "/mens" , method = RequestMethod.GET)
public ModelAndView custMen()
{
    ModelAndView modelAndView =new ModelAndView();

    byte[] picContent = customerDao.stockProductMenData();
    byte[] encoded = Base64.getEncoder().encode(picContent);
    System.out.println("ssssssssss"+picContent);



                modelAndView.addObject("pic",encoded);
                modelAndView.setViewName("mens");
                return modelAndView;

}

前端有thymleaf 这里我们收到pic的对象并使用thymleaf显示但是pic不显示

    <a href="mens_single.html">
    <div class="cbp-pgitem a3ls">
      <div class="cbp-pgitem-flip">
                            <img alt="Image"  th:field="${pic}" width="250" height="250"/>


   </div>
     </div>

3 个答案:

答案 0 :(得分:2)

您可以使用以下代码

Blob imageBlob = resultSet.getBlob(yourBlobColumnIndex);
byte[] imageBytes = imageBlob.getBytes(i, (int) imageBlob.length());

答案 1 :(得分:1)

将blob转换为字节,然后使用将该字节转换为Base64String Base64.getEncoder().encodeToString(byte[] image);给出需要在上下文中设置为变量的Base64String,并使用context.setVariable(key, Base64String variable);添加一个密钥,然后将其传递到Template Engine中进行处理,并在Thymeleaf html页面中添加此行 <img th:src="@{'data:image/png;base64,' + ${Base64String's key} }" />

此方法适用于添加图像,二维码和条形码等条件,条件是它们可以转换为byte []进行进一步处理。

答案 2 :(得分:1)

假设您发送了一个要存储在数据库中的字节[]。

  1. Base64编码的字符串添加到模型图

    //I'm using a model here but the concept is the same
     model.addAttribute("pic",Base64.getEncoder.encodeToString(*your_blob*));
    
  2. 在您的百里香片段中:

    <img th:src="${pic} == null ? _ : @{'data:image/png;base64,'+${pic}}">
    

Thymeleaf的模板引擎将有助于将Base64字符串转换为图像。