当我尝试从产品对象添加Base64中的图像时,如下一步:
<tbody>
<tr th:each="product : ${products}">
<td><img th:src="@{'data:image/png;base64,' + ${product.image}}" /></td>
<td th:text="${product.name}"></td>
<td th:text="${product.price}"></td>
<td th:if="${product.state==true}" th:text="Activo" style="color:green;"></td>
<td th:if="${product.state==false}" th:text="Bloqueado" style="color:red;"></td>
<td><a href="#" class="btn btn-info btn-xs" data-toggle="collapse" data-target="#collapse-form">Editar</a><a href="#" class="btn btn-danger btn-xs">Eliminar</a></td>
</tr>
</tbody>
{$product.image}
的值为[B@776a398
但是如果我放入LOG.Info();这告诉我based64 string
。我该如何解决?
这是我的控制器:
@GetMapping("/admin/products")
public ModelAndView index(){
User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
ModelAndView mvn = new ModelAndView();
mvn.addObject("user",userServiceImpl.getOne(user.getUsername()));
List<Product> products = productServiceImpl.getAll();
for(Product product : products)
{
byte[] encode = Base64.getEncoder().encode(product.getImage());
product.setImage(encode);
LOG.info(new String(encode));
}
mvn.addObject("products",products);
mvn.setViewName(view);
LOG.info("Se ha ingresado al controlador de productos");
return mvn;
}
答案 0 :(得分:0)
获得产品图片的价值时:
<img th:src="@{'data:image/png;base64,' + ${product.image}}" />
Thymeleaf正在执行你的byte []的toString()
,在java中,默认的toString()获取一些不可读的值,这就是百里香添加到src的内容。
来自官方文件:
Object类的toString方法返回一个由。组成的字符串 对象是实例的类的名称,at-sign 字符`@&#39;,以及散列的无符号十六进制表示 对象的代码。换句话说,此方法返回一个相等的字符串 价值:
getClass()。getName()+&#39; @&#39; + Integer.toHexString(hashCode())
因此,如果您需要获得与记录器中显示的相同,则可以使用将其作为String返回的方法:
public class Product {
//...
public String getImageEncoded() {
return new String(this.image);
}
}
然后在百里香中使用这种方法:
<img th:src="@{'data:image/png;base64,' + ${product.getImageEncoded()}}" />