【问题标题】:retrieve image from database using spring mvc使用spring mvc从数据库中检索图像
【发布时间】:2015-06-04 19:36:13
【问题描述】:

UserEntityManager.java

@RequestMapping(value = "getImages.do", method = RequestMethod.GET)
public byte[] getImage(final String username) {
    Blob img = null;
    byte[] imgData = null;
    sql = "SELECT UserPhoto FROM u_logininfo WHERE LoginName = ?";

    try {
        img = jdbcTemplate.queryForObject(sql, new Object[]{username}, new RowMapper<Blob>() {

            @Override
            public Blob mapRow(ResultSet rs, int arg1)
                    throws SQLException {
                Blob blob = rs.getBlob("UserPhoto");
                return blob;
            }

        });

        imgData = img.getBytes(1, (int) img.length());
        return imgData;
        //File file = new File
    }
    catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

这是我的控制器

UserController.java

@RequestMapping(value = "getImages.do" , method = RequestMethod.GET)
private ModelAndView viewImages(Model model){
    String userName = (String)SecurityContextHolder.getContext().getAuthentication().getName();
    byte[] image = userEntityManager.getImage(userName);
    model.addAttribute("images", image);
    return new ModelAndView("Fun Zone/Photo");
}

和jsp

<div class="col-sm-2" style="margin-top: 288px; margin-left: 291px;">
    <img src="getImages.do">
</div>

我想使用 Spring MVC 3 在 .jsp 页面上显示图像,但图像在 jsp 中不显示。

【问题讨论】:

  • 你能检查浏览器控制台,它给出了什么错误?
  • localhost:8081/demo/getImages.do 方法调用并且控制台中没有显示任何错误
  • 为什么 UserEntityManager 有这样的请求映射? @RequestMapping(value = "getImages.do", method = RequestMethod.GET) 就可以了吗?这是服务还是 DAO 对吧?

标签: java html spring jsp spring-mvc


【解决方案1】:

我建议你重写控制器。似乎有很多事情不完全是它应该的方式。做这样的事情:

@RequestMapping(value = "getImages.do", method = RequestMethod.GET)
    public void viewImages(HttpServletRequest request, HttpServletResponse response) throws IOException {

        // get the image
        String userName = (String)SecurityContextHolder.getContext().getAuthentication().getName();
        byte[] image = userEntityManager.getImage(userName);              

        // get MIME type of the file
        String mimeType = "application/octet-stream";

        // set content attributes for the response
        response.setContentType(mimeType);
        response.setContentLength((int) image.length());

        // set headers for the response
        String headerKey = "Content-Disposition";
        String headerValue = String.format("attachment; filename=image.jpeg");
        response.setHeader(headerKey, headerValue);

        // get output stream of the response
        OutputStream outStream = response.getOutputStream();

        // get input stream and a fixed size buffer
        InputStream is = new ByteArrayInputStream(image);
        byte[] buffer = new byte[4096];

        // write data into output stream
        int read = -1;
        while(read = in.read(buffer)) != -1) {
             outStream.write(buffer, 0, read);
        }

        // close output stream
        outStream.flush();
        outStream.close(); 
}

并且还摆脱了 UserEntityManager 上的 RequestMapping。

【讨论】:

    猜你喜欢
    • 2015-07-16
    • 2021-10-06
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多