我无法在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>
答案 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)
假设您发送了一个要存储在数据库中的字节[]。
将 Base64编码的字符串添加到模型图 :
//I'm using a model here but the concept is the same
model.addAttribute("pic",Base64.getEncoder.encodeToString(*your_blob*));
在您的百里香片段中:
<img th:src="${pic} == null ? _ : @{'data:image/png;base64,'+${pic}}">
Thymeleaf的模板引擎将有助于将Base64字符串转换为图像。