如何使用Spring + Hibernate从MySQL中检索带有文本的图像

时间:2014-11-30 22:34:02

标签: java mysql spring hibernate spring-mvc

有人可以请求帮助,我正在尝试使用Spring MVC + Hibernate从数据库中检索带有一些文本的图像但是却非常失败。我能够显示一个或另一个,但不能同时显示(图像和文本),它也会在控制台中显示错误。 错误: - getOutputStream() has already been called for this response DAO: -

public List<Product> listProductsById(Integer productId) {
    List<Product> prod = em.createNamedQuery("Product.findByProductId")
            .setParameter("productId", productId).getResultList();
    return prod;
}
public byte[] loadImage(Integer productId){
    return em.find(Product.class, productId).getimage();
}

控制器: -

@RequestMapping(value = "details/{id}", method = RequestMethod.GET)
public String showProductDetails(@PathVariable("id") Integer id,
        Model model, HttpServletResponse response) throws IOException {

    List<Product> product = olss.listProductById(id);
          byte[] image = olss.loadImage(id);

           response.setContentType("image/jpeg, image/jpg, image/png, image/gif");
           response.getOutputStream().write(image);
           response.getOutputStream().flush();  
           response.getOutputStream().close();

           model.addAttribute("prodList", product);
           model.addAttribute("prodList", image);

    return "prodDetails";
}

JSP: -

<img alt="Image of product" src="prodDetails?id=${prod.productId}">

2 个答案:

答案 0 :(得分:0)

欢迎使用堆栈溢出(可能还有MVC编程)。您不会以您尝试的方式将模型返回到视图。图像可以像png,gif,jpg这样的有效图像格式作为自己的响应提供。不是字节数组

您的图片代码如下所示:

然后你需要设置一个单独的控制器函数来返回图像:

@RequestMapping...
public @ResponseBody byte[] productLabel(...) {
        byte[] imageByte = new byte[0];
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ImageIO.write(img, "png", baos);
            baos.flush();
            imageByte = baos.toByteArray();
            baos.close();
        } catch(IOException e) {
            logger.error("Unable to generate Image for Shipping Label on Order "+orderId+". "+
                    e.getLocalizedMessage());
            return null;
        }
        return imageByte;
}

注意你的想法是错误的:JSP是一个用于生成HTML的模板引擎。您不会在html页面中嵌入图像,而是定义带有图像路径的图像标记。

答案 1 :(得分:0)

   model.addAttribute("prodList", product);
   model.addAttribute("prodList", image);

也许这是你的问题..你将差异值放在同一个键中。

或者为什么不将图像的文件名保存在数据库中。See This Link